ios - 解决两个平移手势识别器之间的冲突

标签 ios objective-c uipangesturerecognizer

我有以下层次结构:

  • 查看
    • 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/

相关文章:

ios - 信号已经绑定(bind)到关键路径

ios - 调用completeTransition后调整导航栏 : in custom transition

ios - NSData 无法再从互联网上检索图像

swift - 向左滑动框架超出固定点,然后通过向右滑动更新框架来改变方向,获取运动平移差异

ios - 没有这样的模块 "PackageDescription"

objective-c - 在单个文档中存储多个文件

ios - 简单的UIImageView幻灯片IOS计时器问题

ios - 带有 UIButton 作为自定义 View 的 UIBarButtonItem 不显示

ios - `UIPanGestureRecognizer` 在 iOS 中使用 VoiceOver 的用户无法访问

ios - 如何在 iOS 的 ImageView 中添加手势识别器?