我有以下层次结构:
- 查看
- subview
每个 View 都分配有 UIPanGestureRecognizer
。外部平移手势识别器只对垂直平移感兴趣,因此我为此实现了委托(delegate)方法:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer {
CGPoint velocity = [panGestureRecognizer velocityInView:panGestureRecognizer.view];
return fabs(velocity.y) > fabs(velocity.x);
}
然而,Subview 的平移手势总是优先于识别。有没有办法让外部平移手势识别器先识别,如果失败, subview 中的平移手势可以接管?
我尝试同时识别并且它有效,但随后两个识别器开始平移:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
最佳答案
从 iOS 7 开始,UIGestureRecognizerDelegate Protocol 已经声明了两个委托(delegate)方法来满足你的需要,你可以使用 |gestureRecognizer:shouldRequireFailureOfGestureRecognizer:| 要么 |gestureRecognizerShouldBegin:shouldBeRequiredToFailByGestureRecognizer:|但以相反的方式。
以下片段是我的 UIPanGestureRecognizer 委托(delegate)实现:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer {
CGPoint velocity = [panGestureRecognizer velocityInView:panGestureRecognizer.view];
return fabs(velocity.y) > fabs(velocity.x);
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
if (otherGestureRecognizer == panGestureOfSubView) {
return YES;
}
return NO;
}
关于ios - 解决两个平移手势识别器之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233465/