【问题标题】:How to replace TouchesBegan with UIGestureRecognizer如何用 UIGestureRecognizer 替换 TouchesBegan
【发布时间】:2011-07-08 17:27:08
【问题描述】:

问题来了: 我想在我的应用程序中使用 UIGestureRecognizer。 出于这个原因,我想从我的观点中放弃 TouchBegan/TouchEnded 事件。

但是我不明白如何使用 UIGestureRecognizers 管理触摸开始的时间(用户将手指放在屏幕上)。

最简单的一个是 UITapGestureRecognizer 但相关的选择器只有在 TapGesture 完成时才会被触发(嗯......当然这完全有意义)。但问题仍然存在:如何停止使用 touchesBegan 并从 UIGestureRecognizer 获取该事件?

谢谢!

【问题讨论】:

    标签: objective-c uigesturerecognizer


    【解决方案1】:

    这是一个例子:

     //Pan gesture
    recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    ((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouches = 3; //number of fingers
    recognizer.delegate = self;
    [self.view addGestureRecognizer:recognizer];
    
    [recognizer release];
    
    - (void)handlePan:(UIPanGestureRecognizer *)recognizer 
    {
       if (recognizer.state == UIGestureRecognizerStateBegan)
       {
        //do something
       } else if (recognizer.state == UIGestureRecognizerStateEnded) 
       {
        //do something 
       }
    }
    

    还在 .h 文件中实现 UIGestureRecognizerDelegate。根据您使用的视图,您可能需要执行 self.view.userInteractionEnabled = YES 。例如,如果是 UIImageView,则需要设置 userInteractionEnabled = YES,默认为 NO

    【讨论】:

      【解决方案2】:

      对于你正在尝试的东西,你做不到。手势识别器用于高级手势,因此它们在所有应用程序中的行为相同(例如滑动、双击所需的时间等)。对于低级控制和识别器不能做的事情,你仍然需要在 touchesbegan、touchesEnded 等中实现逻辑。

      【讨论】:

      • 这个响应是完全错误的,用下面的 UIGestureRecognizerStateBegan 检查响应。
      【解决方案3】:

      为什么不在 UIGestureRecognizer 子类中实现您自己的 touchesBegan —— 拦截消息,提取您想要的信息,然后将消息传递给 super 的 touchesBegan?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 2014-01-04
        • 2011-05-03
        相关资源
        最近更新 更多