0

我有两个视图AB. B是 的子视图A。我想监视双击动作A,在这种情况下,我将移动B到点击位置。

现在,我想把那部分代码放在里面B,这样可以避免在A.

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

但是,我仍然希望使用其他手势(包括单击)A,所以我想出了两种不同的方法来做到这一点:

  1. 识别里面pointInside:NO对于单击,返回,对于双击∫,返回YES,但是,似乎没有办法做到这一点。
  2. 始终返回 YES pointInside:,并捕获单击和双击手势。对于单击手势,将其发送给 A 进行处理,但是,仍然没有找到解决方法。

任何人都可以帮我一个吗?或者告诉我是否看错了方向?

4

1 回答 1

1

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

当您双击视图时,您将收到多个hitTest:withEvent:方法调用(依次调用pointInisde:withEvent:),这意味着您必须通过使用时间偏移量来测量每次在其他。

它接到多少电话?尽可能多地,您的手指在屏幕上停留的每一毫秒,此方法都会被方法调用轰炸。为您打算做的事情超载它根本不明智。

简而言之,手势识别器是非常方便的对象,它封装了必须自己实时处理的所有复杂性UITouch

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

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

[A addGestureRecognizer:tapGesture];

AB成为您的观点)

于 2013-07-26T08:16:27.560 回答