• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:48:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有以下层次结构:

  • 查看
    • subview

每个 View 都分配了 UIPanGestureRecognizer。外部平移手势识别器只对垂直平移感兴趣,所以我为此实现了委托(delegate)方法:

- (BOOL)gestureRecognizerShouldBeginUIPanGestureRecognizer *)panGestureRecognizer {
    CGPoint velocity = [panGestureRecognizer velocityInView:panGestureRecognizer.view];
    return fabs(velocity.y) > fabs(velocity.x);
}

但是,Subview 的平移手势在识别中始终优先。有没有办法让外部平移手势识别器先识别,如果失败, subview 的平移手势可以接管?

我尝试了同时识别并且它可以工作,但是两个识别器都开始平移:

- (BOOL)gestureRecognizerUIGestureRecognizer *)gestureRecognizer 

    shouldRecognizeSimultaneouslyWithGestureRecognizerUIGestureRecognizer *)otherGestureRecognizer {
        return YES;
    }



Best Answer-推荐答案


从 iOS 7 开始,UIGestureRecognizerDelegate 协议(protocol)已经声明了两个代理方法来满足你的需要,你可以使用 |gestureRecognizer:shouldRequireFailureOfGestureRecognizer:| 或者 |gestureRecognizerShouldBegin:shouldBeRequiredToFailByGestureRecognizer:|但相反。

以下片段是我的 UIPanGestureRecognizer 委托(delegate)实现:

- (BOOL)gestureRecognizerShouldBeginUIPanGestureRecognizer *)panGestureRecognizer {
    CGPoint velocity = [panGestureRecognizer velocityInView:panGestureRecognizer.view];
    return fabs(velocity.y) > fabs(velocity.x);
}

- (BOOL)gestureRecognizerUIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizerUIGestureRecognizer *)otherGestureRecognizer{
    if (otherGestureRecognizer == panGestureOfSubView) {
        return YES;
    }

    return NO;
}

关于ios - 解决两个平移手势识别器之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233465/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap