为什么UIEvent在touchesBegan和touchesMoved中是一个不同的对象?

时间:2011-05-12 18:35:41

标签: iphone touches

在示例项目aurioTouch应用程序委托中,代码指示(我在别处读过)传递给touchesBegan,touchesMoved和touchesEnded的触摸事件对象将是同一个对象,而它仍然是单个集合用户动作,例如触摸和移动手指。当我重写UIScrollView并实现这些方法时,我得到的事件是不同的对象。我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

UITouch个对象将是相同的,但它们将打包在一个新事件中。

答案 1 :(得分:2)

在为一个手势提供触摸事件时,UIEvent被重用是对的。来自docs

  

表示触摸的UIEvent对象   事件是持续的   多点触控序列; UIKit重用了   每个事件都有相同的UIEvent实例   交付给应用程序。您   永远不应该保留一个事件对象或   从事件返回的任何对象   宾语。如果你需要保留   来自周围事件的信息   一个阶段到另一个阶段,你应该复制   来自UITouch或的信息   UIEvent对象。

我假设您的案例的行为差异来自UIScrollView完成的特殊事件处理。滚动视图延迟事件传递,因为它们需要检测用户的滚动意图(滑动手势)。所以他们必须有办法保持UIEvents - 可能复制它们以确保它们保持原始状态。这可能是您看到不同对象的原因。

请注意,以上所有内容仅仅是猜测。