使用pointInside:withEvent:用于不同的手势

时间:2013-07-26 07:36:20

标签: ios cocoa-touch uigesturerecognizer

我有两个视图ABBA的子视图。我希望监控A中的双击操作,在这种情况下,我会将B移至点按位置。

现在,我想在B中制作这部分代码,这样可以避免在A中进行编码。

所以我在B添加了一个双击手势识别器,并且我覆盖了-pointInside:withEvent:中的B,因此它可以对B之外的双击操作作出反应框架。

但是,我仍然希望在A上使用其他手势(包括单击),因此我想出了两种不同的方法来实现此目的:

  1. pointInside:内进行识别,对于单击,请返回NO,对于双击,返回YES,但是,似乎无法执行此操作。
  2. 始终为pointInside:返回YES,并捕获单击和双击手势。对于单击手势,将其发送到A处理,但仍然没有找到方法。
  3. 任何人都可以帮我一个吗?或者告诉我如果我看错了方向?

1 个答案:

答案 0 :(得分:1)

可以工作,但它非常混乱,因为pointInside:withEvent:是一个非常原始的调用。

当你点击一个视图时,你会收到多个hitTest:withEvent:方法调用(反过来调用pointInisde:withEvent:),这意味着你必须做一些努力工作每当两个水龙头一个接一个地出现时,使用时间偏移来测量。

它收到多少电话?尽可能多的,你的手指每隔几毫秒就会停留在屏幕上,这种方法会被方法调用轰炸。根据你的意图重载它是不明智的。

简单地说,手势识别器是非常方便的对象,它包含了必须自己处理实时UITouch的所有复杂性。

作为保持代码相对干净的解决方案,您可以将UITapGestureRecognizer添加到A,然后将选择器交给B进行处理,您甚至可以在界面构建器中执行此操作,或通过代码:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:B action:@selector(handleGesture:)];
tapGesture.numberOfTapsRequired = 2;

[A addGestureRecognizer:tapGesture];

AB是您的观点)