2

我正在研究 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 回答 3

5

来自UIGestureRecognizer的文档

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

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

于 2012-05-03T10:29:23.917 回答
3

我不认为这是可能的。

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

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

于 2012-05-03T10:30:21.730 回答
0

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

于 2012-05-03T23:36:41.370 回答