在 iPhone 上处理多次触摸
Posted
技术标签:
【中文标题】在 iPhone 上处理多次触摸【英文标题】:Handling multiple touches on iPhone 【发布时间】:2010-02-02 15:05:04 【问题描述】:我目前正在开发一个应用程序,其中我有一个带有很多子视图的主视图。现在我有两个特定的子视图,我只希望其中一个同时“可触摸”。所以两者都应该能够响应触摸事件,但不能同时响应。因为我有其他应该能够同时触摸的子视图,所以我不能使用 multitouch 或 exclusiveTouch 属性。 对此有什么想法吗?也许我可以将两个视图组合到一个单点触摸区域。
提前致谢
【问题讨论】:
【参考方案1】:在您的应用委托或其他单例中添加一个读写属性,我们称之为viewBeingTouched
。确保您使用@property
不使用 nonatomic
。
使您的两个视图实例化为一个覆盖UIResponder
方法的类,从而实现:
在 touchesBegan 中,检查 viewBeingTouched
的值。如果是nil
,将其设置为self
并调用super 的实现。否则,什么也不做。
在 touchesEnded 中,检查 viewBeingTouched
的值。如果是self
,则设为nil。
明白了吗?第一个获取触摸的视图会抓取该属性并阻止另一个视图注册它。
【讨论】:
谢谢,我想我明白了。我今天晚上试试看。【参考方案2】:将逻辑放入它们的父级中,以(暂时)禁用未获得触摸的逻辑(userInteractionEnabled = NO)。
当然,仍然有人可以同时对它们中的每一个进行指压。您可以确定哪个视图最靠近触摸中心。
【讨论】:
当另一个视图收到 touchesBegan 事件时,我确实使用 userInteractionEnabled 禁用了一个视图,但正如您所说,仍然可以同时按下它们。我还尝试向第二次触摸的视图发送 touchesEnded 事件,但这根本不起作用。 虽然它们会同时被按下,但它们不能同时被发送 touchesBegan ,这就是为什么 Lawrence 的建议应该奏效的原因。以上是关于在 iPhone 上处理多次触摸的主要内容,如果未能解决你的问题,请参考以下文章