0

在示例项目aurioTouch应用程序委托中,代码表明(我在其他地方读过)传递给 touchesBegan、touchesMoved 和 touchesEnded 的触摸事件对象将是同一个对象,但它仍然是一组用户操作,例如触摸并移动一根手指。当我重写 UIScrollView 并实现这些方法时,我得到的事件是不同的对象。我在这里想念什么?

4

2 回答 2

3

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

于 2011-05-12T18:39:13.177 回答
2

你是对的,在UIEvent为一个手势传递触摸事件时重用了。从文档

代表触摸事件的 UIEvent 对象在多点触摸序列中是持久的;UIKit 为传递给应用程序的每个事件重用相同的 UIEvent 实例。您永远不应保留事件对象或从事件对象返回的任何对象。如果您需要将事件的信息从一个阶段保存到另一个阶段,您应该从 UITouch 或 UIEvent 对象复制该信息。

我认为您的案例的行为差异是由UIScrollView. 滚动视图延迟事件传递,因为它们需要检测用户的滚动意图(滑动手势)。所以他们必须有一种方法来保存 UIEvents——可能会复制它们以确保它们保持原始状态。这可能是您看到不同对象的原因。

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

于 2011-05-12T19:24:06.683 回答