检测上的UIScrollView触摸位置(Detect touch position on UiSc

2019-08-19 00:09发布

我需要从一个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;
}

Answer 1:

我看到了一个答案的,这样我认为它可以解决你的问题。 看来,SDK不通过触摸处理方法的UIScrollView的子类了。 所以,你应该执行hitTest:到触摸传给你的子类。

更多信息请参阅答案。



Answer 2:

为了检测内滚动视图触摸位置,试试这个代码

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

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
 { 
   CGPoint touchPoint=[gesture locationInView:scrollView];
 }


Answer 3:

你可以选择使用scrollview.panGestureRecognizerlocationInView方法来获取触摸的坐标在您的视图。 这可能是在任何的scrollView的委托方法根据您的要求。



Answer 4:

scrollView.delaysContentTouches = NO;

这将使得该的touchesBegan和其他触摸事件将scrollViewDidScroll之前被触发。

的则hitTest是一个黑客并且不应当被优选的解决方案。



文章来源: Detect touch position on UiScrollView