iPhone - UIScrollView ...检测触摸的坐标

时间:2011-10-27 20:04:48

标签: iphone ios cocoa-touch ipad uiscrollview

  

可能重复:
  UIScrollview getting touch events

是否可以检测手指触摸UIScrollView的位置?

我的意思是,假设用户以这种方式使用他的手指:点击并滚动,再次抬起手指,点击和滚动等。是否有可能知道CGPoint与自我相关的点击发生的位置。卷轴是?滚动条占据了整个自我。

感谢。

4 个答案:

答案 0 :(得分:12)

你可以用手势识别器来做到这一点。要检测单击位置,请使用UITapGestureRecognizer

UITapGestureRecognizer *tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)] autorelease];
[myScrollView addGestureRecognizer:tapRecognizer];

- (void)tapAction:(UITapGestureRecognizer*)sender{ 
    CGPoint tapPoint = [sender locationInView:myScrollView];
    CGPoint tapPointInView = [myScrollView convertPoint:tapPoint toView:self.view];
}

要将tapPoint转换为self.view,您可以在UIView类中使用convertPoint:toView:方法

答案 1 :(得分:0)

看一下touchesBegan:withEvent:你会得到一个UITouch's的NSSet,而一个UITouch包含一个应该返回触摸CGPoint的locationInView:方法。

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以在视图中找到该位置,并为其添加滚动设置。现在,您的下一个问题是-(void)touchesBegan:touches:event将不会被调用,因为事件将被发送到您的滚动视图。这可以通过子类化UIScrollView来修复,并让scrollview将触摸事件发送给下一个响应者(您的视图)。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // Position of touch in view
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];

    // Scroll view offset
    CGPoint offset = scrollView.contentOffset;

    // Result
    CGPoint scrollViewPoint = CGPointMake(touchPoint.x, touchPoint.y + offset.y);
    NSLog(@"Touch position in scroll view: %f %f", scrollViewPoint.x, scrollViewPoint.y);
}