4

我只是做了一个示例来检查平移手势。

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

但是每当我在平移手势中给出第二点时,就像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

4 回答 4

4

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

于 2012-08-22T05:43:15.037 回答
4

尽管设置了最大和最小触摸次数,我也遇到了这个错误。我正在对我的手势识别器进行子类化,并认为它与此有关。我通过numberOfTouches在引用它之前简单地检查来解决它:

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

希望这对某人有帮助!

于 2013-03-23T16:36:33.620 回答
1

该错误告诉您在这一行:

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

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

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

[self.imageView setUserInteractionEnabled:YES];
于 2012-08-22T06:58:11.737 回答
1

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

于 2016-03-15T03:02:25.377 回答