2011-03-25 23 views
3

我在视图中添加了两个手势识别器。一个将处理视图拖动,另一个处理双击。像iPhone - 互相争斗的手势识别器

UITapGestureRecognizer *doubleTap = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
     action:@selector(deleteThisView)]; 
[doubleTap setDelegate:self]; 
[doubleTap setCancelsTouchesInView:YES]; 
[doubleTap setNumberOfTapsRequired:1]; 
[base addGestureRecognizer:doubleTap]; 
[doubleTap release]; 

UIPanGestureRecognizer *panGesture = nil; 
panGesture = [[UIPanGestureRecognizer alloc] 
        initWithTarget:self action:@selector(drag:)]; 
[panGesture setMaximumNumberOfTouches:1]; 
[panGesture setDelegate:self]; 
[base addGestureRecognizer:panGesture]; 
[panGesture release]; 

问题事情是这样的:作为视图可以移动时,双击在某种程度上很难获得,因为视图可以一个头发滑行到一侧或其他与iOS不会将其识别为双点击,而是将其视为两次移动,拖动方法将运行两次。

我看不出如何做到这一点。任何线索?

感谢

回答

9

有一个委托方法,将告诉两个识别可能在同一时间去中央动作代码:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    if (gestureRecognizer==_panRecognizer && otherGestureRecognizer==_swipeRecognizer) 
     return YES; 
    if (gestureRecognizer==_swipeRecognizer && otherGestureRecognizer==_panRecognizer) 
     return YES; 
    return NO; 
} 

也许你可以尝试类似的东西。

1

这里是流浪在迅速回答:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    if gestureRecognizer == panRecognizer && otherGestureRecognizer == swipeRecognizer { 
     return true 
    } 
    if gestureRecognizer == swipeRecognizer && otherGestureRecognizer == panRecognizer { 
     return true 
    } 
    return false 
} 

不要忘记实现委托协议,并设置你的手势代表自我(我忘了这最初)。