我有一个按钮。我想在初次触摸时更改图像。如果触摸小于 1 秒,我希望它做 X。如果触摸长于 1 秒,我希望它做 Y。
我很难弄清楚如何处理这个问题。UIButton 被证明很麻烦,所以我想我可以用UIGestureRecognizersortouchesBegin:
最初的想法是用 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 秒的延迟。让我感到困惑的是,如果我使用UILongPressGestureRecognizera longTap.minimumPressDuration = 0,它会立即触发。
这是在我需要的程序中。在虚拟区域玩弄它,touchesBegins:火灾也会立即发生。
什么可能导致它在程序中滞后?
有没有不同的方法可以获得预期的效果?