我们可以在多个视图上添加单个手势并使其正常工作吗?

我正在研究Pan Gesture的样本。 我很想知道我可以在两个视图上添加单个手势吗?

我的代码如下:

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(invokePanGesture:)]; [panGesture setMinimumNumberOfTouches:1]; [panGesture setMaximumNumberOfTouches:2]; [btnGreen addGestureRecognizer:panGesture]; [btnYellow addGestureRecognizer:panGesture]; 

我的处理程序方法如下:

 - (void)invokePanGesture:(UIPanGestureRecognizer*)recognizer { CGPoint translation = [recognizer translationInView:self.view]; recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; } 

现在的问题是手势识别器只考虑我的案例btnYellow最后一个视图作为其视图。 如果我创建两个单独的GestureRecognizer对象,它可以工作。 所以请告诉我:

  1. 是否可以在多个视图中使用单个手势?

  2. 如果是,那怎么样?

  3. 如果现在为什么呢?

提前致谢

我不认为这是可能的。

请查看https://stackoverflow.com/a/5567684/470964 。

另外https://stackoverflow.com/a/7883902/470964 :也许它也是你问题的解决方案。 我认为答案是GestureRecognizer只有一个视图属性,将被设置。

来自UIGestureRecognizer的文档

手势识别器根据对特定视图和所有视图的子视图进行经过测试的触摸进行操作。 因此必须与该观点相关联。 要建立该关联,您必须调用UIView方法addGestureRecognizer:。 手势识别器不参与视图的响应者链。

因此,总之,GestureRecognizer可以在多个视图上操作的唯一方法是识别器是否在其他视图的超视图上运行。

难道你不能只编写你的invokePanGesture方法同时对两个视图做同样的事情吗?