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

Kap*_*isa 2 iphone uigesturerecognizer ios uipangesturerecognizer

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

我的代码如下:

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

[btnGreen addGestureRecognizer:panGesture];
[btnYellow addGestureRecognizer:panGesture];
Run Code Online (Sandbox Code Playgroud)

我的处理程序方法如下:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是手势识别器在我的情况下只考虑最后一个视图btnYellow作为它的视图。如果我创建两个单独的 GestureRecognizer 对象,它就可以工作。所以请让我明白:

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

  2. 如果是,那么如何?

  3. 如果是现在,为什么?

提前致谢

Dam*_*amo 5

来自UIGestureRecognizer的文档

手势识别器对针对特定视图和所有该视图的子视图进行命中测试的触摸操作。因此,它必须与该视图相关联。要建立这种关联,您必须调用 UIView 方法 addGestureRecognizer:。手势识别器不参与视图的响应器链。

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