当触摸位于不同的子视图中时,超级视图上的UIPinchGestureRecognizer不会尝试识别夹点

时间:2015-05-31 20:40:20

标签: ios uikit uipinchgesturerecognizer

我尝试在视图层次结构中的根视图上设置捏合手势。如果构成捏合的两个触摸位于两个不同的子视图中,则无法识别此捏合手势。在下图中,我的绿色根视图未识别捏合手势(由橙色触摸表示),因为每个触摸存在于不同的蓝色子视图中。这些蓝色子视图是视图层次结构中的兄弟视图和绿色根视图的子视图。

View hierarchy with touches diagram

如果两个触摸都发生在同一子视图中,则可以正确识别捏合手势。捏手势识别器永远不会改变状态,因此当在不同子视图中进行触摸时(从通过子类化UIPinchGestureRecognizer并将调用记录到 setState:进行验证),永远不会有机会识别夹点。

最后,子视图和根视图都处理许多其他手势,包括平移和点击。我尝试在视图层次结构中添加一个清晰的叠加层来捕捉捏合,但是这个清晰的叠加视图会阻止正确定位蓝色子视图的触摸和点击。

有没有办法让捏手势在上图中的情况下工作,或者我注定只能在层次结构的一个视图中发生捏合才能识别捏?

1 个答案:

答案 0 :(得分:1)

我的问题与你的问题很常见 - 当两个手指都在1个子视图上时,UIPinchGestureRecognizer没有在superview上工作。它里面有UIScrollView,它的内部识别器是我自己的。

也可以通过设置手势识别器代理并设置其在其他识别器执行此操作时捕获触摸的能力来解决问题

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;}

但不是我的情况(由于顾客的意愿,他们需要彼此等待)