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

时间:2012-05-03 10:20:34

标签: iphone ios uigesturerecognizer uipangesturerecognizer

我正在研究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. 如果现在为什么呢?

  4. 先谢谢

3 个答案:

答案 0 :(得分:4)

来自UIGestureRecognizer

的文档

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

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

答案 1 :(得分:3)

我认为这不可能。

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

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

答案 2 :(得分:0)

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