2012-04-14 74 views
1

如下图所示,我的应用程序有几个UIViews,BCD,并排,并且所有包含在包封的UIView A检测手势上重叠的屏幕区域中的iOS5

enter image description here

我在B,CD的每一个中都有UIPinchGestureRecognizer。我还想做的是在整个区域A(不妨碍其他手势识别器工作)上识别不同的手势。

这是最好的策略是什么?我针对的是iOS5 +,无需向后兼容。

还值得注意的是,A的手势识别器可能必须是自定义手势识别器,因为我想检测一个捏,但涉及> 2个手指。

思想:

如果安装了A手势识别器无法正常工作,有可能通过使用touchesBegan等作为UIResponder docs笔记做旧的方式,你可以有一个子类UIView只需拨打[super touchesBegan:touches withEvent:event]即可让其在响应者链中传递,如果您对此触摸不感兴趣。

回答

0

事实证明,仅仅以简单明了的方式添加手势识别器就行得通,至少对于我想识别的手势而言。我想它会更复杂。

0

像往常一样将手势识别添加到A.

现在您需要首先测试所碰到的东西。

首先您需要测试项目的z-index。例如,如果你触摸B,那么你的函数将对所有受影响的项目进行循环/命中测试,在这种情况下,A & B. 当你的函数检测到两个A碰撞测试时,应该检查z-index。例如B的z-index是2,那么z z-index是1.现在你知道B是用户想要触摸的东西,因为它的z-index更高,这意味着它在顶部。

确定了目标(B)后,在执行GestureRecognize之前,您需要暂时禁用A的手势识别以消除重叠的手势识别之间的任何冲突。 B touch完成/结束后,启用A的GestureRecognize回来。

+0

感谢您的回答。点击测试哪些组件/代码?使用哪种技术? (如touchesBegan等)? – occulus 2012-04-16 07:45:47

+0

我没有可以发布的代码,但我会尽力解释。 使用Touches作为初始触摸识别,并将GestureRecognizes用作识别组件内部触摸的辅助处理程序。 初次触摸打击测试整个屏幕。循环遍历所有元素,并找出它们中的哪些位于触摸的坐标中。所以如果你触摸B,循环应该找到B和A,因为二者都在接触坐标内。然后,您可以禁用/启用冲突的GestureRecognizes,并在手势完成后启用它们。 – 2012-04-16 11:05:51