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

ios - 识别器位置(在 : recognizer. View 中)快速返回零点

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

我对 Swift 中的 UIPanGestureRecognizer 有一个奇怪的案例。 我有一个处理平移手势的函数,并在 UIGestureRecognizerDelegate 中指定“false”,这样没有其他手势会干扰平移。

这是有问题的案例:

  1. 用户用一根手指触摸并开始平移
  2. 用户将第二根手指放在屏幕上 - 第二根手指被忽略
  3. 用户抬起第一根手指,而第二根手指仍在触摸 - 此时我的处理程序被调用 recognizer.state == .ended。问题是此时的位置(我通过调用 recognizer.location(in:recognizer.view) 返回点 (0,0)<

我是否使用了错误的方法来理解这一点?似乎由于第二根手指被完全忽略了,第一根手指应该表现得像一个普通的平移,当状态==结束时我会得到位置。



Best Answer-推荐答案


我刚刚对其进行了测试 - 识别器结束时位置不再可用(使用以下方法)

  recognizer.location(ofTouch: 0, in: recognizer.view)

我会添加一个变量来跟踪 .began 和 .changed 中的最后一个已知点(我在其中获取数据)然后在 .ended 中使用该数据

编辑:通过子类化获取数据

class pgr: UIPanGestureRecognizer {
    var myTouch:Set<UITouch>!

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
        myTouch = touches
        super.touchesEnded(touches, with: event)
    }

}

然后回到你的实现中

    if sender.state == .ended {
        print(sender.myTouch.first?.location(in: sender.view))
    }

关于ios - 识别器位置(在 : recognizer. View 中)快速返回零点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45441545/

回复

使用道具 举报

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

本版积分规则

关注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