2

我需要从 UIScrollView 获取触摸位置。但是当我为我的滚动视图创建一个子类时:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
  NSArray *touchesArray = [touches allObjects];
  UITouch *touch = (UITouch *)[touchesArray objectAtIndex:0];
  CGPoint point = [touch locationInView:self];
  self.position = point;}

该函数touchesBegan并不总是被调用。如果我快速滑动,touchesBegan则永远不会调用,而是scrollViewDidScroll直接调用。

我无法使用UIGesture (UITapGestureRecognizer, ... ),因为用户不会点击或滑动。

还有其他方法可以从 UIScrollView 获取位置吗?

编辑 :

谢谢ThXou:https ://stackoverflow.com/a/15763450/1752843

UIScrollView 子类:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    self.position = point;
    return self;
}
4

4 回答 4

7

要检测滚动视图内的触摸位置,请尝试此代码

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[scrollView addGestureRecognizer:singleTap]; 

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
 { 
   CGPoint touchPoint=[gesture locationInView:scrollView];
 }
于 2013-04-02T11:13:16.303 回答
3

您也可以使用scrollview.panGestureRecognizer' locationInView方法在视图中获取触摸的坐标。scrollView根据您的要求,这可以在任何委托方法中。

于 2014-02-21T12:15:43.560 回答
2

我在 SO 中看到了一个答案,我认为它可以解决您的问题。似乎 SDK 不再将触摸处理方法传递给 UIScrollView 子类。因此,您应该执行 ahitTest:以将触摸传递给您的子类。

有关更多信息,请参阅答案。

于 2013-04-02T11:54:46.473 回答
0
scrollView.delaysContentTouches = NO;

它将使得 touchesBegan 和其他触摸事件将在 scrollViewDidScroll 之前触发。

hitTest 是一个 hack,不应该是首选解决方案。

于 2017-09-12T09:18:44.010 回答