在iOS中查看触摸位置时,PAN手势会崩溃

时间:2012-08-22 05:32:38

标签: iphone objective-c ios uigesturerecognizer uipangesturerecognizer

我只是做一个样本来检查平移手势。

平移手势正在检测并正常工作。

但每当我在像CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];这样的平移手势中给出第二个点时,它就会崩溃。

控制台正在发送消息

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UIPanGestureRecognizer locationOfTouch:inView:]: index (1) beyond bounds (1).'

当我使用panGestureRecognizer.maximumNumberOfTouches = 1;时      panGestureRecognizer.minimumNumberOfTouches = 1;它还在崩溃。

当我使用panGestureRecognizer.maximumNumberOfTouches = 2;时      panGestureRecognizer.minimumNumberOfTouches = 2; 然后它没有进入

- (void)panGestureHandler:(UIPanGestureRecognizer *)sender method.

任何人都可以指导我在哪里出错。

提前致谢。希望得到您的帮助。

我试过这种方式。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGestureHandler:)];
     panGestureRecognizer.maximumNumberOfTouches = 2;
     [self.imageView addGestureRecognizer:panGestureRecognizer];

}
- (void)panGestureHandler:(UIPanGestureRecognizer *)sender
{
    if ([sender state] == UIGestureRecognizerStateBegan )
    {
        CGPoint firstPoint = [sender locationOfTouch:0 inView:self.imageView];
        CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];
    }
    else if ([sender state] ==UIGestureRecognizerStateEnded ) 
    {
    }

}

4 个答案:

答案 0 :(得分:3)

您提供了maximumNumberOfTouches,但没有minimumNumberOfTouches。即,在第一次触摸之后可以识别手势。在这种情况下,可能不存在第二次触摸,并且您的索引1(引用第二个元素)超出了数组边界。

答案 1 :(得分:2)

尽管设置了最大和最小触摸次数,但我也遇到了这个错误。我是我的手势识别器的子类,并认为它与此有关。我只是在引用它之前检查numberOfTouches来解决它:

if ([gestureRecognizer numberOfTouches] > 0) {
    CGPoint point = [gestureRecognizer locationOfTouch:0 inView:self.superview.window];
}

希望这有助于某人!

答案 2 :(得分:1)

错误告诉你这一行:

    CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];

索引“1”超出locationOfTouches范围。因此,如上所述,您需要确保设置minimumNumberOfTouches

此外,您还需要在图像视图上启用用户交互,以便它能够响应手势识别器。

[self.imageView setUserInteractionEnabled:YES];

答案 3 :(得分:1)

当设置了最大/最小触摸时,它们确定它是否是开始发送动作的有效手势,但它们不是结束它的标准。例如,如果将max / min设置为2.如果检测到双指触摸,则处理程序开始接收操作。离开一根手指不会结束手势。处理程序仍然接收具有更改状态和单触的操作。最后,处理程序接收0触摸和结束状态。