Cocoa touch 我如何告诉UIgestureRecognitor取消现有的触摸?

Cocoa touch 我如何告诉UIgestureRecognitor取消现有的触摸?,cocoa-touch,uigesturerecognizer,Cocoa Touch,Uigesturerecognizer,我有一个uipangestureerecognizer用于跟踪用户手指下方的对象(UIImageView)。我只关心X轴上的运动,如果触摸偏离Y轴上对象帧的上方或下方,我希望结束触摸 我已经掌握了确定触摸是否在对象的Y边界内所需的一切,但我不知道如何取消触摸事件。翻转识别器的cancelsTouchesInView属性似乎无法满足我的要求 谢谢 这个小把戏对我有用 @implementation UIGestureRecognizer (Cancel) - (void)cancel {

我有一个
uipangestureerecognizer
用于跟踪用户手指下方的对象(
UIImageView
)。我只关心X轴上的运动,如果触摸偏离Y轴上对象帧的上方或下方,我希望结束触摸

我已经掌握了确定触摸是否在对象的Y边界内所需的一切,但我不知道如何取消触摸事件。翻转识别器的
cancelsTouchesInView
属性似乎无法满足我的要求


谢谢

这个小把戏对我有用

@implementation UIGestureRecognizer (Cancel)

- (void)cancel {
    self.enabled = NO;
    self.enabled = YES;
}

@end
uigesturecognizer@enabled
文档中:

禁用手势识别器,以便 不接受触摸。默认值 价值是肯定的。如果你改变这个 属性设置为“否”,同时执行手势 识别器当前正在识别一个 手势识别器 转换到取消状态


您有几种处理方法:

  • 如果您正在编写一个自定义的平移手势识别器子类,当您注意到它偏离您关心的区域时,您可以通过在识别器内部调用
    -ignoreTouch:withEvent:
    轻松完成此操作

  • 由于您使用的是标准的平移识别器,并且触摸开始正常(因此您不希望通过代理功能阻止它),因此您实际上只能在收到识别器的目标动作时进行区分。检查
    translationView:
    locationInView:
    返回值的Y值,并将其适当夹紧

  • 这个怎么样


    禁用手势识别器,使其不接收触摸。默认值为“是”。如果在手势识别器当前识别手势时将此属性更改为“否”,则手势识别器将转换为取消状态。

    @matej在Swift中的回答

    extension UIGestureRecognizer {
      func cancel() {
        isEnabled = false
        isEnabled = true
      }
    }
    
    Obj-C:

    Swift 3:

    recognizer.isEnabled = false
    recognizer.isEnabled = true
    

    根据文档,您可以将手势识别器分为以下子类:

    在YourPanGestureRecognizer.m中:

    #import "YourPanGestureRecognizer.h"
    
    @implementation YourPanGestureRecognizer
    
    - (void) cancelGesture {
        self.state=UIGestureRecognizerStateCancelled;
    }
    
    @end
    
    在YourPanGestureRecognizer.h中:

    #import <UIKit/UIKit.h>
    #import <UIKit/UIGestureRecognizerSubclass.h>
    
    @interface NPPanGestureRecognizer: UIPanGestureRecognizer
    
    - (void) cancelGesture;
    
    @end
    

    Ref:

    只需将
    识别器设置为
    。在
    手持面板(u.recognizer:ui-pangestrerecognizer)
    方法中声明
    。结束
    。取消

    OP似乎在询问取消手势中的个人触摸,不完全终止该手势。非常好的最小解决方案中建议使用此技术。这将在UIGestureRecognitzerState开始并终止该平移手势后立即调用UIGestureRecognitzerState Cancelled。问题是如何忽略识别器并在其操作中将触摸事件传递给其他人?
    #import "YourPanGestureRecognizer.h"
    
    @implementation YourPanGestureRecognizer
    
    - (void) cancelGesture {
        self.state=UIGestureRecognizerStateCancelled;
    }
    
    @end
    
    #import <UIKit/UIKit.h>
    #import <UIKit/UIGestureRecognizerSubclass.h>
    
    @interface NPPanGestureRecognizer: UIPanGestureRecognizer
    
    - (void) cancelGesture;
    
    @end
    
    YourPanGestureRecognizer *panRecognizer = [[YourPanGestureRecognizer alloc] initWithTarget:self action:@selector(panMoved:)];
    [self.view addGestureRecognizer:panRecognizer];
    [...]
    -(void) panMoved:(YourPanGestureRecognizer*)sender {
        [sender cancelGesture]; // This will be called twice
    }