1

我将 UIScrollView 子类化并 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 在其中实现了方法。

但是单击或按住滚动视图时没有任何反应!

编辑:我还需要使用 touchesEnded 方法

4

4 回答 4

2

我认为 UIScrollView 有两个手势识别器。它们负责处理触摸序列,因此它们会吞下触摸事件。

使用 scrollView 委托方法来处理拖动手势或

touchesShouldBegin:withEvent:inContentView:

处理滚动视图内容触摸的方法和

touchesShouldCancelInContentView:

取消它。

作为替代方案,您可以操作 scrollView 的 panGesture 识别器以将事件传递给下一个响应器。

于 2013-05-03T07:07:33.270 回答
1

我认为您正在使用滚动视图作为子视图。所以在这种情况下,您可以使用手势,因为我遇到了同样的问题。

你可以UITapGestureRecognizer 像这样使用......

-(void)viewDidLoad
{
   UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
   gr.delegate = self;
    [self.scrollView addGestureRecognizer:gr];
}
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
    // do here whatever you wanna ..........
}
于 2013-05-03T06:51:03.357 回答
1

在您的 UIScrollView 子类中覆盖 hitTest 方法,如下所示:

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

  UIView *result = nil;
  for (UIView *child in self.subviews)
    if ([child pointInside:point withEvent:event])
      if ((result = [child hitTest:point withEvent:event]) != nil)
        break;

  return result;
}
于 2013-05-03T06:42:36.777 回答
0

解决了!

用过LongPressedGestureRecognizer。action 方法一直被调用,直到用户持有视图。从中我可以弄清楚gestureRecognizer(,,,UIGestureRecognizerStateBegan...Ended...Cancelled状态

于 2013-05-03T07:36:02.833 回答