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

ios - 子类化 UIControl 的 endTracking 以实现多点触控

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

我通过继承 UIControl 并覆盖以下方法来创建自定义控件*:

  • - beginTrackingWithTouch:withEvent:
  • - continueTrackingWithTouch:withEvent:
  • - endTrackingWithTouch:withEvent:
  • - cancelTrackingWithEvent:

此控件将支持多点触控交互。具体来说,一根或两根手指可能会向下触摸,拖动一段时间,然后向上触摸,所有这些都是独立的。

我的问题出现在这些多点触控事件的末尾,在 endTrackingWithTouch:withEvent: 中。系统在我的控件上每个多点触控序列仅调用一次此方法,并且在发生的第一次触摸时调用它。这意味着将不再跟踪可能仍在拖动的第二次触摸。

这一系列的 Action 就是这种现象的一个例子:

  1. 手指A触地。 beginTracking 被调用。
  2. 手指A在左右拖动。 continueTracking 被重复调用以更新我的控件。
  3. 手指B触地。 beginTracking 被调用。
  4. 手指 AB 左右拖动。 continueTracking 被重复调用以更新我的控件。
  5. B 手指触碰。 endTracking 被调用。
  6. 手指A在左右拖动。不调用任何方法。
  7. 手指A触碰。不调用任何方法。

问题在于此序列的最后三个步骤。 The documentation for UIControl以下是 endTrackingWithTouch:withEvent::

Sent to the control when the last touch for the given event completely ends, telling it to stop tracking.

但在我看来,在上述步骤 5 中手指 B 向上触摸之后,给定事件的最后一次触摸尚未完全结束。最后的触摸是手指A!


*一个范围 slider ,如果你一定要问的话。 但是已经有很多开源范围 slider 了, 你说。是的,没错,但是这个将支持多点触控和自动布局。



Best Answer-推荐答案


我在使用多点触控的自定义控件中遇到了同样的问题。
因为 UIControlUIView 的子类,继承自 UIResponder,所以请随意使用:

- (void)touchesBeganNSSet *)touches withEventUIEvent *)event;
- (void)touchesMovedNSSet *)touches withEventUIEvent *)event;
- (void)touchesEndedNSSet *)touches withEventUIEvent *)event;
- (void)touchesCancelledNSSet *)touches withEventUIEvent *)event;

方法。

这些方法在 UIControl 子类中工作正常。

关于ios - 子类化 UIControl 的 endTracking 以实现多点触控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820827/

回复

使用道具 举报

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

本版积分规则

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