iphone - 双击故障安全方式

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


asl*_*nci 6

编辑:我错过了你说你不能使用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)

最后一行,只有在双击失败时,您的单击处理程序才能工作.因此,您可以在应用程序中同时进行单击和双击.