我正在try 向视图添加2 UITapGestureRecognizers个,一个用于单击,另一个用于双击事件.单击识别器工作正常(自行).但我好像不能让双击识别器工作.

已经try 过cancelsTouchesInViewdelaysTouchesBegandelaysTouchesEnded这样的属性,但仍然不起作用.

当我双击时,单击识别器将始终处于激活状态,双击事件也会发送到超级视图.但自定义双击识别器似乎根本没有收到通知.

文件似乎表明,上面提到的3个属性可以用于此目的.但我只是不确定应该设置什么值,以及在哪个识别器(单识别器、双识别器或两个识别器)上设置.希望熟悉这个的人能帮上忙.

以下是挡路的最新更新代码.

// ****** gesture recognizers ******

- (void)addSingleAndDoubleTapGestureRecognizersToView:(UIView *)view
{
    // single tap    
    UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector(handleSingleTapOnView:)];                                 
    [singleTapRecognizer setNumberOfTouchesRequired:1];
    [view addGestureRecognizer: singleTapRecognizer];

    // double tap 
    UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: tableViewController action: @selector (handleDoubleTapOnView:)];        
    [doubleTapRecognizer setNumberOfTouchesRequired:2];         
    [singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
    [view addGestureRecognizer: doubleTapRecognizer];         
}

- (void)handleSingleTapOnView:(id)sender
{

}

- (void)handleDoubleTapOnView:(id)sender
{

}

推荐答案

UITapGestureRecognizer *singleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doSingleTap)] autorelease];
singleTap.numberOfTapsRequired = 1; 
[self.view addGestureRecognizer:singleTap];

UITapGestureRecognizer *doubleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doDoubleTap)] autorelease];
doubleTap.numberOfTapsRequired = 2; 
[self.view addGestureRecognizer:doubleTap];

[singleTap requireGestureRecognizerToFail:doubleTap];

Note: If you are using numberOfTouchesRequired it has to be .numberOfTouchesRequired = 1;

For Swift

let singleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didPressPartButton))
singleTapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(singleTapGesture)

let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))
doubleTapGesture.numberOfTapsRequired = 2
view.addGestureRecognizer(doubleTapGesture)

singleTapGesture.require(toFail: doubleTapGesture)

Ios相关问答推荐

从后台线程调用DispatchObject的方法安全吗?

UIAlertController的空子类是否可以与`appearance(whenContainedInInstancesOf:)`一起安全使用

如何使用参与者允许并行读取,但阻止对SWIFT中资源的并发读取和写入?

如何防止UITest套件与Fastlane一起执行?

如何删除NavigationView中的默认透明标头?

iOS按钮和navigationLink在List中相邻

如何从 Locale Swift 获取货币符号

错误:无法根据成员environmentObject推断上下文基础

通过MatchedGeometryEffect向上滑动视图

在iOS7半透明导航栏中获取正确的 colored颜色

Xcode 项目格式:3.1、3.2、6.3 和 8.0 有什么区别?

如何在 iOS 的 xib 中设置十六进制 colored颜色 代码

判断可选数组是否为空

在 Swift 中禁用向后滑动手势

Swift中类的初始化类方法?

iOS Swift - 获取当前本地时间和日期时间戳

aps-environment 始终在发展

iOS 7 半透明模态视图控制器

如何从 UIPickerView 获取选定的值

NSURL 到带有 XCTest 的测试包中的文件路径