2013-03-26 56 views
1

想知道下面是确定处理UIGestureRecognizer触动:这是使用其中一个UIGestureRecognizers处理手势的安全方式吗?

 if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) 
     { 
      //process touches 
     } 
     else if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded) 
     { 
      //do whatever after gesture recognizer finishes 
     } 

基本上,我想知道,如果发生UIGestureRecognizerStateEndedUIGestureRecognizer仍然过程触动,或在该点已全部完成接触?我得到奇怪的值translationInView,所以只想在这里问。

回答

1

你问:

基本上,我想知道,如果发生UIGestureRecognizerStateEndedUIGestureRecognizer仍然处理触摸,或在该点已全部完成接触?

当你得到UIGestureRecognizerStateEnded,是的,手势完成。但显然,除非您在该位置从视图中移除手势识别器,否则如果用户开始新手势,手势识别过程将从UIGestureRecognizerStateBegan开始重新开始。

而且,你说:

我越来越怪异值translationInView所以只是想问问这里。

你的代码示例建议你处理一个捏手势,它不会做translationInView,所以我不确定你会得到什么“奇怪的值”。你可以,但通过设置有两个同时手势你的手势的delegate和实施shouldRecognizeSimultaneouslyWithGestureRecognizer

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self 
                       action:@selector(handlePinch:)]; 
    pinch.delegate = self; 
    [self.view addGestureRecognizer:pinch]; 

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self 
                      action:@selector(handlePan:)]; 
    pan.delegate = self; 
    [self.view addGestureRecognizer:pan]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) 
     return YES; 
    if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
     return YES; 
    return NO; 
} 

- (void)handlePinch:(UIPinchGestureRecognizer *)gesture 
{ 
    CGFloat scale = [gesture scale]; 
    NSLog(@"%s: %@: scale=%.2f", __FUNCTION__, [self stringFromGestureState:gesture.state], scale); 
} 

- (void)handlePan:(UIPanGestureRecognizer *)gesture 
{ 
    CGPoint translation = [gesture translationInView:gesture.view]; 
    NSLog(@"%s: %@: translation=%@", __FUNCTION__, [self stringFromGestureState:gesture.state], NSStringFromCGPoint(translation)); 
} 

上面的代码工作,其中handlePan返回盘中,handlePinch返回代打的handlePantranslationInView看起来平常。也许你可以告诉我们你是如何使用一个捏手势,并获得translationInView,并告诉我们你得到的值有什么奇怪的。