在 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 上处理多次触摸的主要内容,如果未能解决你的问题,请参考以下文章

处理 Iphone 上的触摸

iPhone - 在 UIViewController 中处理触摸幻灯片

在 iphone 上模拟触摸

iPhone touchmove 绕过

iPhone - 在屏幕上绘图以响应触摸事件

在 iPad/iPhone 模拟器上模拟超过 2 次触摸