带有 Touch Up Inside 和 Touch Repeat 的 UIButton?
Posted
技术标签:
【中文标题】带有 Touch Up Inside 和 Touch Repeat 的 UIButton?【英文标题】:UIButton with both Touch Up Inside and Touch Repeat? 【发布时间】:2013-08-16 19:57:46 【问题描述】:让按钮能够同时执行Touch Up Inside
操作和Touch Down Repeat
操作的最佳方法是什么?有点像 iPhone 上的 Home 按钮:单击一次进入主屏幕,但快速单击两次打开多任务栏。现在我的按钮已经连接了这两种方法,但是Touch Up Inside
方法(不出所料)在Touch Down Repeat
发生之前被调用。
我可以想出一些方法来解决这个问题(让 Touch Up Inside 方法等待一秒钟,看看在执行之前是否有另一次点击,在第一次点击后让第二个按钮不可见地移动到适当的位置,等等)但是它们似乎都有些hack-y,并且对性能损失和错误持开放态度。我找到了 tapCount
属性,但它是用于 UITouch 而不是 UIButton,所以 if([_buttonAddItems tapCount] > 1) else if([_buttonAddItems tapCount] == 1)
,这似乎是最有效的方法,但不起作用。
这类事情有最佳实践吗?或者如果没有,有没有人有首选的方法来完成这项工作?
【问题讨论】:
【参考方案1】:尝试断开按钮与两个触摸事件的连接,并将两个轻击手势识别器挂接到它。这是一个link to an answer,它解释了如何设置两个手势识别器,以便其中一个识别单击,另一个识别双击:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doSingleTap)];
singleTap.numberOfTapsRequired = 1;
[myButton addGestureRecognizer:singleTap];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget: self action:@selector(doDoubleTap)];
doubleTap.numberOfTapsRequired = 2;
[myButton addGestureRecognizer:doubleTap];
// This is the "secret sauce":
[singleTap requireGestureRecognizerToFail:doubleTap];
【讨论】:
我以前从未使用过 GestureRecognizers,但这看起来正是我想要的,谢谢!以上是关于带有 Touch Up Inside 和 Touch Repeat 的 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 子类忽略“Touch Up Inside”事件
UISlider 返回两个 Touch Up Inside 事件,为啥会这样?
第二个视图控制器中的 UIButton - Touch Up Inside 不起作用(Touch Down 可以)