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

发布于 2024-11-07 01:19:27 字数 323 浏览 0 评论 0原文

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

In the example project aurioTouch application delegate the code indicates (and I've read elsewhere) that the touch event object passed to touchesBegan, touchesMoved, and touchesEnded will be the same object while it is still a single set of user actions, such as touching and moving a finger. When I override UIScrollView and implement these methods, the events that I get back are different objects. What am I missing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

欢你一世 2024-11-14 01:19:27

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

The UITouch objects will be the same, but they are packaged in a new event.

荆棘i 2024-11-14 01:19:27

您是对的,在为一个手势传递触摸事件时会重用 UIEvent 。来自 文档

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

我认为您的情况的行为差异是由 UIScrollView 完成的特殊事件处理造成的。滚动视图延迟事件传递,因为它们需要检测用户的滚动意图(滑动手势)。因此,他们必须有一种方法来保留 UIEvents——可能是复制它们以确保它们保留其原始状态。这可能是您看到不同物体的原因。

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

You are right that the UIEvent is reused when delivering touch events for one gesture. From the docs:

A UIEvent object representing a touch
event is persistent throughout a
multi-touch sequence; UIKit reuses the
same UIEvent instance for every event
delivered to the application. You
should never retain an event object or
any object returned from an event
object. If you need to keep
information from an event around from
one phase to another, you should copy
that information from the UITouch or
UIEvent object.

I presume the difference in behavior for your case results from the special event handling done by UIScrollView. Scroll views delay event delivery because they need to detect a scrolling intent by the user (swipe gestures). So they have to have a way of keeping UIEvents around—probably copying them to make sure they retain their original state. This might be the reason you see different objects.

Note that all of the above is only guessing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文