Spa*_*Dog 4 iphone iphone-sdk-3.0
我正在尝试检测视图上的双击,但是当双击时,第一次点击触发TouchesBegan上的动作,因此,在检测到双击之前,始终首先检测到单击.
如何才能检测到双击?
我不能使用OS 3.x手势,因为我必须使它与旧操作系统版本兼容.
谢谢
Efr*_*ain 14
一些来自scrollViewSuite示例代码的tapZoom示例的摘录:
首先,触摸结束时启动的功能:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch tapCount] == 1) {
[self performSelector: @selector(handleSingleTap)
withObject: nil
afterDelay: 0.35]; // after 0.35s we call it a single tap
} else if([touch tapCount] == 2) {
[self handleDoubleTap];
}
}
Run Code Online (Sandbox Code Playgroud)
第二:如果在超时期间发生新的触摸,则拦截消息:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[NSObject cancelPreviousPerformRequestsWithTarget: self
selector: @selector(handleSingleTap)
object: nil];
}
Run Code Online (Sandbox Code Playgroud)
另请参阅:http://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomingByTouch/ZoomingByTouch.html#//apple_ref/doc/uid/TP40008179-CH4-SW1
在这里:( scrollView套件) http://developer.apple.com/iphone/library/samplecode/ScrollViewSuite/Introduction/Intro.html
编辑:我错过了你说你不能使用3.x手势的点,所以这是对你的问题的无效答案,但是我离开它以防万一可以使用3.x手势的人可以从中受益.
您可以创建两个手势识别器,一个用于单击,一个用于双击:
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouchesOne:)];
singleTapGesture.cancelsTouchesInView = NO;
singleTapGesture.delaysTouchesEnded = NO;
singleTapGesture.numberOfTouchesRequired = 1; // One finger single tap
singleTapGesture.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:singleTapGesture];
[singleTapGesture release];
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouchesTwo:)];
doubleTapGesture.cancelsTouchesInView = NO;
doubleTapGesture.delaysTouchesEnded = NO;
doubleTapGesture.numberOfTouchesRequired = 1; // One finger double tap
doubleTapGesture.numberOfTapsRequired = 2;
[self.view addGestureRecognizer:doubleTapGesture];
[doubleTapGesture release];
Run Code Online (Sandbox Code Playgroud)
然后,这是一拳:
[singleTapGesture requireGestureRecognizerToFail : doubleTapGesture];
Run Code Online (Sandbox Code Playgroud)
最后一行,只有在双击失败时,您的单击处理程序才能工作.因此,您可以在应用程序中同时进行单击和双击.
| 归档时间: |
|
| 查看次数: |
3992 次 |
| 最近记录: |