检测UiScrollView上的触摸位置

时间:2013-04-02 10:59:47

标签: ios animation uiscrollview touch

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

- (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获取职位?

编辑:

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

UIScrollView子类:

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

4 个答案:

答案 0 :(得分:7)

要检测scrollview中的触摸位置,请尝试使用此代码

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

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

答案 1 :(得分:2)

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

有关详细信息,请参阅答案。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

scrollView.delaysContentTouches = NO;

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

hitTest是一个黑客攻击,不应该是首选解决方案。