【问题标题】:Why is the UIEvent a different object in touchesBegan and touchesMoved?为什么 UIEvent 在 touchesBegan 和 touchesMoved 中是不同的对象?
【发布时间】:2011-05-12 18:35:41
【问题描述】:

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

【问题讨论】:

    标签: iphone touches


    【解决方案1】:

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

    【讨论】:

    • aurioTouch 肯定没有错误?行为是否发生了变化,还是我误读了示例应用程序委托的工作方式?查看 pinchEvent 的用法。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • touchsevent.allTouchestouchesBegan函数中有什么区别?
    • @Bagusflyer allTouches 返回所有当前存在的触摸,而传递的参数仅包含与此事件相关的触摸。
    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多