我只是做一个样本来检查平移手势。
平移手势正在检测并正常工作。
但每当我在像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 )
{
}
}
答案 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触摸和结束状态。