在示例项目aurioTouch应用程序委托中,代码指示(我在别处读过)传递给touchesBegan,touchesMoved和touchesEnded的触摸事件对象将是同一个对象,而它仍然是单个集合用户动作,例如触摸和移动手指。当我重写UIScrollView并实现这些方法时,我得到的事件是不同的对象。我在这里缺少什么?
答案 0 :(得分:3)
UITouch
个对象将是相同的,但它们将打包在一个新事件中。
答案 1 :(得分:2)
在为一个手势提供触摸事件时,UIEvent
被重用是对的。来自docs:
表示触摸的UIEvent对象 事件是持续的 多点触控序列; UIKit重用了 每个事件都有相同的UIEvent实例 交付给应用程序。您 永远不应该保留一个事件对象或 从事件返回的任何对象 宾语。如果你需要保留 来自周围事件的信息 一个阶段到另一个阶段,你应该复制 来自UITouch或的信息 UIEvent对象。
我假设您的案例的行为差异来自UIScrollView
完成的特殊事件处理。滚动视图延迟事件传递,因为它们需要检测用户的滚动意图(滑动手势)。所以他们必须有办法保持UIEvents - 可能复制它们以确保它们保持原始状态。这可能是您看到不同对象的原因。
请注意,以上所有内容仅仅是猜测。