我有一个按钮。我想在初次触摸时更改图像。如果触摸小于 1 秒,我希望它做 X。如果触摸长于 1 秒,我希望它做 Y。
我很难弄清楚如何处理这个问题。UIButton 被证明很麻烦,所以我想我可以用UIGestureRecognizers
ortouchesBegin:
最初的想法是用 aUITapGestureRecognizer
来检测快速点击来执行 X,然后使用 aUILongTapGestureRecognizer
来处理更长的按下来执行 Y。
问题是一个UITapGestureRecognizer
不标记UIGestureRecognizerStateBegan
,它只发送一个通知UIGestureRecognizerStateEnd
。
所以我决定尝试结合使用touchesBegin:
和touchesEnd:
方法并使用UILongPressGestureRecognizer
:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// change image
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
// do X
// change image to original image
}
-(IBAction)longPressDetected:(UILongPressGestureRecognizer *)recognizer {
DLog(@"fired");
if (recognizer.state == UIGestureRecognizerStateBegan) {
// Do y
// change image to original image
}
else if (recognizer.state == UIGestureRecognizerStateCancelled) {
}
else if (recognizer.state == UIGestureRecognizerStateEnded) {
}
}
如果UILongPressGestureRecognzier
发生火灾,它会取消初始touchesBegan:
(不触发touchesEnded:
方法)。
但是我遇到了该touchesBegin:
方法启动缓慢的问题。被触发的方法有 0.5 秒的延迟。让我感到困惑的是,如果我使用UILongPressGestureRecognizer
a longTap.minimumPressDuration = 0
,它会立即触发。
这是在我需要的程序中。在虚拟区域玩弄它,touchesBegins:
火灾也会立即发生。
什么可能导致它在程序中滞后?
有没有不同的方法可以获得预期的效果?