在我的应用程序中,我添加了 3.2 SDK 中可用的新手势识别器。一切似乎都正常工作,屏幕上的响应时间非常快。但是出于某种原因,当我添加 requireGestureRecognizerToFail
时对于我的一些手势,触发手势时有一个非常明显的延迟。下面是我用来创建手势识别器的代码片段。有谁知道为什么会有延迟以及我该如何解决?我正在使用 requireGestureRecognizerToFail
防止SingleTap
当用户执行 DoubleTap
时触发的手势.
- (void)createGestureRecognizers {
//Single Finger Double-Tap
UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSingleDoubleTap:)];
singleFingerDTap.numberOfTapsRequired = 2;
[super addGestureRecognizer:singleFingerDTap];
//Single Finger Tap
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(handleSingleTap:)];
singleFingerTap.numberOfTapsRequired = 1;
[singleFingerTap requireGestureRecognizerToFail:singleFingerDTap];
[self addGestureRecognizer:singleFingerTap];
//Two Finger Pan
UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(handlePanGesture2:)];
panGesture2.maximumNumberOfTouches = 2;
[super addGestureRecognizer:panGesture2];
//Single Finger Pan
UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(handlePanGesture1:)];
panGesture1.maximumNumberOfTouches = 1;
[panGesture1 requireGestureRecognizerToFail:panGesture2];
[super addGestureRecognizer:panGesture1];
[singleFingerDTap release];
[singleFingerTap release];
[panGesture1 release];
[panGesture2 release];
}
最佳答案
如果您想区分单击和双击,则必须等待足够长的时间才能确定不会有第二次单击,然后才能将其称为单击。另一种方法是将所有单击操作设计为可以在检测到双击时异步取消或恢复。
例如,如果您有一个单击更改页面和一个双击缩放,那么您必须在单击时为页面更改设置动画,然后在检测到第二次点击时反转动画并进行缩放。到那时,处理单击的 View 可能已经移动。在大多数情况下,那会带来更多的麻烦和困惑,这才是值得的。
关于iPad 手势识别器 - 延迟响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081215/