首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用UITapGestureRecognizer同时检测抽头和双抽头?

如何利用UITapGestureRecognizer同时检测抽头和双抽头?
EN

Stack Overflow用户
提问于 2013-10-01 23:09:57
回答 4查看 16.8K关注 0票数 14

例如,我有一个视图,其中我需要两个不同的手势:

用双击做动作B。

问题是,对于UITapGestureRecognizer,我只能设置最小的所需的点击计数。单点击手势识别器在双点击手势识别器识别双抽头之前识别出抽头。

示例:

代码语言:javascript
运行
复制
_tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
_tapGestureRecognizer.numberOfTouchesRequired = 1;
_tapGestureRecognizer.numberOfTapsRequired = 1;
[self addGestureRecognizer:_tapGestureRecognizer];

_doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognized:)];
_doubleTapGestureRecognizer.numberOfTouchesRequired = 1;
_doubleTapGestureRecognizer.numberOfTapsRequired = 2;
[self addGestureRecognizer:_doubleTapGestureRecognizer];

它总是识别单点击,即使我做双击非常快。我如何设置它,以便点击手势识别器等待并查看双点击手势识别器是否识别?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-01 23:13:53

这是我在我的一个旧项目中使用过的东西,希望它能帮助你走出困境。

代码语言:javascript
运行
复制
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];
票数 49
EN

Stack Overflow用户

发布于 2016-11-02 04:41:23

斯威夫特3号和斯威夫特4号:

代码语言:javascript
运行
复制
let singleTap = UITapGestureRecognizer(target: self, action: #selector(doSingleTap))
singleTap.numberOfTapsRequired = 1

self.view.addGestureRecognizer(singleTap)

let doubleTap = UITapGestureRecognizer(target: self, action: #selector(doDoubleTap))
doubleTap.numberOfTapsRequired = 2

self.view.addGestureRecognizer(doubleTap)

singleTap.require(toFail: doubleTap)
票数 7
EN

Stack Overflow用户

发布于 2017-05-10 13:29:28

代码语言:javascript
运行
复制
   {  UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleDoubleTapGesture:)];
        [doubleTap setDelegate:self];
        doubleTap.numberOfTapsRequired = 2;
        [self.headerView addGestureRecognizer:doubleTap];

        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTapGesture:)];
        singleTap.numberOfTapsRequired = 1;
        [singleTap setDelegate:self];
        [doubleTap setDelaysTouchesBegan:YES];
        [singleTap setDelaysTouchesBegan:YES];
        [self.headerView addGestureRecognizer:singleTap];
  }  
        - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
            return  YES;
        }

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        return YES;
    }

在任何您需要的方法中创建手势识别器。例如,如果您希望在headerView中使用tableView中的点击手势,则在其中创建这些点击手势

代码语言:javascript
运行
复制
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

您的类应该实现UIGestureRecognizerDelegate。上面提到的是该委托类的两个方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19127501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档