问题标签 [uipinchgesturerecognizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 冲突的 UIPanGestureRecognizer(3 个手指)和 UIPinchGestureRecognizer
我将 UIPanGestureRecognizer 和 UIPinchGestureRecognizer 添加到同一个视图中。这通常不会导致任何问题,但我的 UIPanGestureRecognizer 需要 3 个手指会导致问题:
有时,应该在平移时调用捏合手势。它的工作时间约为 50%,但是在同一个视图上实现这两个手势的更好方法是什么,所以准确性更好?
编辑:我只希望一次发生一个手势。
ios - GLKView 放大导航栏
我的 iOS 应用程序窗口顶部的导航栏和底部的工具栏之间有一个 GLKView (OpenGL ES2.0)。我已经使用 UIPinchGestureRecognizer 实现了捏缩放,但是当我缩小很大程度时,我的视图会在顶部导航栏上运行。令人惊讶的是,视图并没有越过底部的工具栏。想知道我做错了什么。
这是我正在使用的视口设置:
这是更新和捏处理程序:
ios - UILable numberoflines 和 font size 在缩小期间自动设置
我的要求如下。
我在UILable
里面加了一个UIView width & height is 30
。我已经设置UIPinchGestureRecognizer
好了UIView
。捏合功能在 UIView 上运行良好。
但是当我放大UILable
字体大小并numberOfLine
自动设置时,我想要那个UIView
。
所以最初UILable
在视图中不可见。当我放大那个时间时UILable
,将显示这些区域,text
以便UILable
可见(例如,这次是 3 行)。如果我增加缩放级别,则文本将显示在一行中。
如何存档此功能?
请参阅下面的屏幕截图我想要做什么
******** 图片 1 *****************
******** 图 2 *****************
********** 图 3 *****************
提前致谢 ..
ios - 下一次触摸前接收系统手势状态通知失败
我有一个控件,可以在一个视图中交替切换两个视图。即,在容器视图中通过子视图方法添加两个视图控制器。捏合手势会放大当前视图,并显示第二个视图。如果希望转到上一个视图,则可以通过捏住手势来完成。问题是,视图不会对 gusture 做出反应,有时并不总是和消息
“下一次触摸前接收系统手势状态通知失败”
在日志中打印出来。任何建议为什么此消息即将到来并且视图无法识别该手势?
ios - 在 uiscrollview 上使用自定义 uigesture 捏三指
我有一个允许捏合、平移和单击/双击功能的 uiscroll。我想添加一个三指捏入/捏出来触发我的应用程序中的其他内容。捏进去做这个,捏出来做那个。
默认情况下,内置滚动捏合允许 2 个手指。我将如何添加第三个?子类?我是否必须删除滚动视图上已有的手势?
ios - 旋转 180 后 UIImageView 反向移动的旋转移动缩放*
这是我用于移动、缩放和旋转 UI 的代码ImageView
都可以正常工作,但问题是当我们旋转ImageView
它时它会旋转,但之后它会反向移动,就像我向右拖动但ImageView
向左移动后我们无法获得当前中心点旋转,这样当我们拖动中心点时,旋转的ImageView
不是原始的
这是继承的自定义类UIImageView
ios - 核心图:捏以更改 x 轴范围
所以我有一个简单的 XY 线图,Y 轴为整数值,X 轴为日期。我想要做的是水平两指捏合并动态调整范围。例如,捏合会给您更大的范围(心智模型是您将显示的开始日期和结束日期设置得更远)然后捏合会给您更小的时间窗口。
是否已经为此内置了一些东西?CorePlot 相当新,默认的手指东西只是缩放图形本身,没有任何值。
我需要在上面放一个手势识别器吗?还是 coreplot 为此内置了一些东西?
干杯
ios - 将捏缩放添加到 UICollectionView
介绍
我将描述我想要达到的效果,然后我将详细说明我目前如何尝试实现它以及它的行为有什么问题。我还会提到另一种我看过但根本无法工作的方法。
最相关的代码位于问题底部,以便快速访问。您可以在 BitBucket下载源代码的 zip文件或将项目作为Mercurial 存储库获取。该项目现在包含以下答案中的修复。如果您想要最初提供的损坏版本,则将其标记为“initial-buggy-version”
该项目是一个极简的概念证明/尖峰,用于评估效果是否可行,所以它相当轻巧!
所需效果
该应用程序将显示大量离散的信息行,形成一个垂直表格。该表格将由用户垂直滚动。这是 a 的标准行为UITableView
,您也可以使用 a UICollectionView
。但是,应用程序还必须支持捏缩放。当你在桌子上捏缩放时,所有的线都应该挤在一起。当你伸展时,所有的线都应该分开。
在我的概念证明中,单个单元格没有调整大小,它们只是重新定位得更近或更远。这是故意的:我认为验证这个想法的可行性并不重要。
这是屏幕截图,显示了当前 App 的缩小和放大效果:
当前实施
我正在使用UICollectionView
带有自定义UICollectionViewLayout
子类的 a 。布局UICollectionViewCells
在屏幕中间以一个漂亮的摆动正弦波定位。每个UICollectionViewCell
都只是一个容纳UILabel
行的容器indexPath
。
子类有一个参数来设置它所描述的每个单元格之间的UICollectionViewLayout
垂直间距,UICollectionView
并且调整它可以让表格根据需要被垂直压缩或拉伸。
我的UICollectionViewController
子类有一个UIPinchGestureRecognizer
. 当识别器检测到比例变化时,UICollectionView
布局中的垂直单元格间距会相应更改。
如果没有进一步考虑,缩放将从内容的顶部开始,而不是触摸手势的中心。在捏合期间调整UICollectionView
'contentOffset
属性以提供此功能。
手势识别器还需要适应捏合时发生的拖动。这也可以通过更改UICollectionView
's来处理contentOffset
。一些额外的代码允许触摸手势的中心点随着手指添加到手势/从手势中移除而改变。
请注意UICollectionView
,作为一个UIScrollView
子类,它有自己的UIPanGestureRecognizer
与我添加的交互UIPinchGestureRecogniser
。我不确定这是否会导致问题。
我添加了代码以UICollectionView
在捏手势期间禁用 ' 的内置滚动,但这似乎没有太大区别。我试图用内置的gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
来使我的失败,但这似乎完全停止了我的捏识别器的工作。我不知道这是我的愚蠢,还是iOS中的错误。UIPinchGestureRecognizer
UIPanGestureRecognizer
如前所述,当前UICollectionViewCell
s 没有调整大小。他们只是重新定位。这是故意的。我认为验证这个概念并不重要。
什么有效
工作位工作得很好。您可以上下拖动表格。在拖动过程中,您可以添加手指并开始捏合,然后松开手指并继续拖动,然后添加并捏合等。这一切都非常流畅。在最初的 iPhone 5 上,它顺利地支持在屏幕上显示超过 200 个视图的捏合和平移。
什么不起作用 1
如果您试图在视图的顶部或底部出现在屏幕上时进行捏合,这一切都会变得有点疯狂。
- 在滚动时,允许拖动视图,以便将其拉到可见内容之外(我想要,因为它是 iOS 上数据列表的标准行为)。
- 然而,在比例变化时,视图会被捕捉回来,以便内容被夹在屏幕上(我不希望这种情况发生)。
这两个在捏合手势时互相打架,这使得内容上下剧烈闪烁(我绝对不想要!)。
什么不起作用 2
如果UICollectionView
您在滚动时松开,则默认滚动会减速,并且当您滚动到内容之外时也会平滑地将内容弹回。目前根本没有处理这些。
- 如果您在滚动时松开捏合手势,它就会停止。
- 如果您使用捏合手势滚动到内容之外然后松开,它会停留在原处并且不会弹回。当您再次开始滚动时,它会将内容跳回。
我尝试过但无法开始工作的事情
UICollectionView
,如果设置正确以支持缩放,则UIScrollView
应该具有内置功能。UIPinchGestureRecogniser
我想知道我是否可以利用它而不是拥有自己的UIPinchGestureRecogniser
. 我试图通过设置最小和最大比例,并添加我的控制器的捏处理程序来设置它。但是,我真的不明白我应该从我的实现中返回什么viewForZoomingInScrollView:
,所以我只是用[[UIView alloc] initWithFrame: [[self collectionView] bounds]]
. 它使滚动视图“折叠”成一行,这不是我想要的!
最后(在代码之前)
这是一个很长的问题,所以感谢您阅读它。如果您能提供答案,将更加感谢您。如果我所说或添加的很多内容无关紧要,我很抱歉!
视图控制器的代码
ios - 将某些手势传递给 uiscrollview 并将其他手势传递给它的内容?
我很抱歉成为这样的初学者。我看过一些 UIGestureRecognizer 教程,并看到了一些关于 SO 的非常有用的答案,但是让这种独特的手势组合起作用让我望而却步。这是详细信息。在此先感谢您的帮助!
FooViewController,在界面生成器中有自己的 .xib,适合 iOS7 中的这个层次结构:
它有时也被一个子类取代,我们称之为FooViewControllerSubclass : FooViewController
。这些是我正在创建的手势:
- 当使用 FooViewControllerSubclass 代替 FooViewController 时,UIPopover 应该接收到捏合手势,导致它被关闭。否则,它不必担心夹伤。
- scrollView 应该接收两个FingerPan手势,使其滚动。
- DrawingView应该接收所有剩余的oneFingerGestures,使其绘制。
目前,1 和 3工作得很好。但是对于 2,twoFingerPanning 只是调用 1 的捏合动作。如果我注释掉那个捏动作,那么 twoFingerPanning 只会在 DrawingView 上导致 3 的 oneFinger 绘图动作。代码摘要在这里:
作为旁注:我也很好奇整个[[self nextResponder] nextResponder]
部分是否是犹太洁食(因为它有效),如果不是,我应该如何将这些信息传递到层次结构中。
谢谢!
ios - 缩放时多个 UIView 像素化
我有两个绘制一个UIBeizerPath
(它必须是 uibeizarpath)的 UIView(BlueView 和 RedView)。
我的 MainView 初始化两个视图并控制缩放功能。
我可以让视图缩放,但是,当它们缩放 UIBeizerPaths 时,它们会被像素化。我尝试过使用[viewname].layer.contentsScale = [[UIScreen mainScreen] scale] * currentScale;
,但这不起作用。
任何帮助将不胜感激!
通过 Photoshop 的魔力,这里有一些我试图完成的插图。
视图看起来没有缩放:
我放大的结果:
缩放时所需的结果:
有什么建议么?将不胜感激。这是我的代码:
主视图.h
主视图.m
蓝线.m
红线.m