【问题标题】:Handling multiple touches on iPhone在 iPhone 上处理多次触摸
【发布时间】:2010-02-02 15:05:04
【问题描述】:

我目前正在开发一个应用程序,其中我有一个带有很多子视图的主视图。现在我有两个特定的子视图,我只希望其中一个同时“可触摸”。所以两者都应该能够响应触摸事件,但不能同时响应。因为我有其他应该能够同时触摸的子视图,所以我不能使用 multitouch 或 exclusiveTouch 属性。 对此有什么想法吗?也许我可以将两个视图组合到一个单点触摸区域。

提前致谢

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

    在您的应用委托或其他单例中添加一个读写属性,我们称之为viewBeingTouched。确保您使用@property 不使用 nonatomic

    使您的两个视图实例化为一个覆盖UIResponder 方法的类,从而实现:

    1. 在 touchesBegan 中,检查 viewBeingTouched 的值。如果是nil,将其设置为self 并调用super 的实现。否则,什么也不做。

    2. 在 touchesEnded 中,检查 viewBeingTouched 的值。如果是self,则设为nil。

    明白了吗?第一个获取触摸的视图会抓取该属性并阻止另一个视图注册它。

    【讨论】:

    • 谢谢,我想我明白了。我今天晚上试试看。
    【解决方案2】:

    将逻辑放入它们的父级中,以(暂时)禁用未获得触摸的逻辑(userInteractionEnabled = NO)。

    当然,仍然有人可以同时对它们中的每一个进行指压。您可以确定哪个视图最靠近触摸中心。

    【讨论】:

    • 当另一个视图收到 touchesBegan 事件时,我确实使用 userInteractionEnabled 禁用了一个视图,但正如您所说,仍然可以同时按下它们。我还尝试向第二次触摸的视图发送 touchesEnded 事件,但这根本不起作用。
    • 虽然它们会同时被按下,但它们不能同时被发送 touchesBegan ,这就是为什么 Lawrence 的建议应该奏效的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多