检测应用中的所有触摸

时间:2011-12-07 21:57:52

标签: objective-c ios ipad uitouch

在iPad应用中,只要用户触摸屏幕,我想要显示图像,突出显示他们正在触摸的点。该应用程序包含许多嵌套视图,所有这些视图都应接收触摸并正常运行。

似乎很简单,但我找不到一个好办法。在根视图控制器上使用touches began: with event和相关函数不起作用,因为如果触摸子视图,则不会触发事件。我还创建了一个“虚拟”手势识别器,它只是将触摸事件传递给另一个绘制图像的类。这很好用,按钮工作,但打破UIScrollViews,我猜测其他子视图与手势重新配置。

您是否可以访问所有触摸事件,而不会影响 这些触摸的目标?

感谢。

3 个答案:

答案 0 :(得分:6)

您的虚拟手势识别器应该没问题。请注意设置状态。可能 - >开始 - > ...

基本上,您的手势识别器会转发所有触摸,以便在任何触摸存在时始终处于开始或可能的状态。

要摆脱其他手势识别器的问题,请在此委托方法中返回YES。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

其他选项是在您的应用中继承主UIWindow并覆盖此方法

- (void)sendEvent:(UIEvent *)event

在这里,您应该可以访问所有活动。过滤它们非常容易。

答案 1 :(得分:3)

您可以将UITapGestureRecognizer应用于整个视图,并将cancelsTouchesInView属性设置为NO。这将允许您通知视图及其子视图上的所有点击,而不会拦截所有触摸事件。

此外,您可以实施-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:委托方法,以防止此手势识别器踩踏UIScrollView等视图所使用的手势识别器。

答案 2 :(得分:1)

你可以尝试重写hitTest:withEvent:

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event

这也许就是你要找的。