У меня есть два распознавателя жестов, которые распознают правильный жест и длинный жест прессы. Я попытался использовать метод делегата gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
, но всякий раз, когда я выполняю салфетки и длинные жесты, метод вызывается много раз, а не один раз. Я использую следующий код для настройки распознавателей жестов, вызова метода делегата и обработки жестов после их выполнения.Как реализовать распознаватель жестов и удерживания жестов?
//Setting up the swipe gesture recognizer
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)];
swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
swipeRight.delegate = self;
[self addGestureRecognizer:swipeRight];
//Setting up the long press gesture recognizer
UILongPressGestureRecognizer *rightLongPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)];
rightLongPressRecognizer.delegate = self;
rightLongPressRecognizer.tag = PRESS_RIGHT_TAG;
[rightLongPressRecognizer setMinimumPressDuration:0.5];
[self addGestureRecognizer:rightLongPressRecognizer];
//Delegate method
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
//Method that the gestures call
-(void)handleSwipeRight: (UIGestureRecognizer *)recognizer {
self.player.direction = RIGHT;
[self resetSpriteView];
[self.playerSprite startAnimating];
float playerSpriteX = self.playerSprite.center.x;
float playerSpriteY = self.playerSprite.center.y;
self.toPoint = CGPointMake(playerSpriteX + TILE_WIDTH, playerSpriteY);
if(!([self checkIfPlayerHasReachedEnd])) {
self.fromPoint = CGPointMake(playerSpriteX, playerSpriteY);
CABasicAnimation *moveAnimation = [CABasicAnimation animation];
moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(playerSpriteX + TILE_WIDTH, playerSpriteY)];
[moveAnimation setDelegate:self];
[moveAnimation setFillMode:kCAFillModeForwards];
[moveAnimation setRemovedOnCompletion:NO];
[moveAnimation setDuration:MOVE_ANIMATION_DURATION];
[self.playerSprite.layer addAnimation:moveAnimation forKey:@"position"];
}
}
Есть ли лучший способ реализовать салфетки и держать жест распознаватель?
Хороший вопрос, +1. –
Почему вы используете тот же метод для обработки обоих жестов? Это нормально, если вам это становится сложнее. – Peres
@JackyBoy - Ну, я думал, что мне нужно установить способ распознавания жестов, поэтому я не был уверен, что еще делать. Есть ли лучший способ сделать это? – pasawaya