I just do a sample to check the pan gesture.
The pan gesture is detecting and working fine.
But whenever i give a secondPoint in the pan gesture like CGPoint secondPoint = [sender locationOfTouch:1 inView:self.imageView];
it is crashing.
The console is giving the message
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[UIPanGestureRecognizer locationOfTouch:inView:]: index (1) beyond bounds (1).'
When I use panGestureRecognizer.maximumNumberOfTouches = 1;
panGestureRecognizer.minimumNumberOfTouches =1; still it is crashing.
When I use panGestureRecognizer.maximumNumberOfTouches = 2;
panGestureRecognizer.minimumNumberOfTouches = 2;
then it is not entering into the
- (void)panGestureHandler:(UIPanGestureRecognizer *)sender method.
Can anyone please guide me where im going wrong.
Thanks in advance.Hoping for your help.
I tried in this way.
- (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 )
{
}
}
You provided a
maximumNumberOfTouches
, but nominimumNumberOfTouches
. I.e., the gesture can be recognized after the first touch. In this case, no second touch may exist, and your index1
(referring the second element) exceeds the array bounds.The error is telling you that on this line:
index "1" is out of
locationOfTouches
bounds. So, as stated above, you need to make sure you setminimumNumberOfTouches
Additionally, you will want to enabled user interaction on the image view in order for it to respond to gesture recognizers.
I too came across this error despite the max and min number of touches being set. I'm subclassing my gesture recognizer and figure it has something to do with that. I got around it by simply checking
numberOfTouches
before referencing it:Hope this helps someone!
When the max/min touches are set, they determines whether it is a valid gesture to begin sending action but they are not the criteria for ending it. For example, if you set the max/min to 2. If a two-finger-touch is detected, the handler starts receiving the action. Leaving one finger will not end the gesture. The handler still receive action with change-state and one touch. In the end, the handler receives 0 touch and end-state.