1

我有一个UIScrollView带有子视图和一个UITapGestureRecognizer.

我这样创建识别器:

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
[self addGestureRecognizer:tgr];

的 view 属性UITapGestureRecognizer指向滚动视图本身,即使用户触摸了不同的视图。我需要知道触摸是否直接在滚动视图上下降。

4

2 回答 2

2

Paul 的建议很好,但如果您不想(或不能)子类化或成为识别器的代表,还有另一种方法。

您可以向手势识别器询问它,然后使用您的滚动视图的方法(在 UIView 上定义)locationInView:检索该点位于顶部的视图。hitTest:withEvent:就像是:

CGPoint location = [recognizer locationInView:scrollView];
UIView *touchedView = [scrollView hitTest:location withEvent:nil];
于 2013-08-27T00:33:59.890 回答
1

您可以成为任何一个子类UITapGestureRecognizer,并通过覆盖touchesBegan:withEvent:类似这样的方法来添加一个新的 ivar 来保存此信息

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  /*
   * If you wanted you could store a set of all the views to allow
   * for multiple touches
   */
  self.touchedView = [touches.anyObject view];
  [super touchesBegan:touches withEvent:event];
}

或者,如果您愿意,您可以成为代表UITapGestureRecognizer并将点击的视图作为属性存储在您的类中,方法是实现gestureRecognizer:shouldReceiveTouch:

于 2013-08-27T00:26:08.570 回答