【问题标题】:Can we add single gesture on multiple views and make it working? [duplicate]我们可以在多个视图上添加单个手势并使其工作吗? [复制]
【发布时间】:2012-05-12 20:26:39
【问题描述】:

我正在制作 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. 如果是现在那为什么?

提前致谢

【问题讨论】:

    标签: iphone ios uigesturerecognizer uipangesturerecognizer


    【解决方案1】:

    来自UIGestureRecognizer 的文档

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

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

    【讨论】:

      【解决方案2】:

      我认为这是不可能的。

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

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

      【讨论】:

        【解决方案3】:

        您不能只编写您的 invokePanGesture 方法来同时对两个视图执行相同的操作吗?

        【讨论】:

        • 我不能,因为我想知道在哪个视图上调用了手势并仅移动该视图。如果我做同样的事情,你会说它不会起作用。它会根据你保持两个视图对象具有相同的框架。
        • 那为什么要使用单一的手势识别器呢?
        猜你喜欢
        • 2021-04-18
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多