Вопрос

Есть ли проблемы с распознавателями жестов и методами класса UIVIEW для анимации?

У меня проблемы с последовательностью анимации на UiimageView от вызова UigestureCognizer. Если последовательность анимации запускается из стандартного обратного вызова, подобного TonsupUpinside, анимация работает нормально. Если он начинается через UILongpress GestureVegrizer, то первая анимация прыгает до конца, а вторая анимация немедленно начинается.

Вот образец, который иллюстрирует мою проблему. В .xib для проекта у меня есть UiimageView, который подключен к Iboutlet ViewTomove. У меня также есть UIBUTTON, подключенный к StartButton Iboutlet, и я подключил его нагруженное действие на ibaction actionPuttonClicked. Действие TouchupinsIde работает, как я хочу, но дальноподдерживающую нужную оценку пропускает до конца первой анимации примерно через полторы. Когда я NSLog вторую анимацию (AnimateTO200), я вижу, что он называется дважды, когда длительное нажатие запускает анимацию, но только один раз, когда действие кнопки TonguumpinSide начинает анимацию.

- (void)viewDidLoad {
[super viewDidLoad];

UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(startButtonClicked)];
NSArray *recognizerArray = [[NSArray alloc] initWithObjects:longPressRecognizer, nil];
[startButton setGestureRecognizers:recognizerArray];

[longPressRecognizer release];
[recognizerArray release];
}

-(IBAction)startButtonClicked {

if (viewToMove.center.x < 150) {
    [self animateTo200:@"Right to left" finished:nil context:nil];
} else {
    [self animateTo100:@"Right to left" finished:nil context:nil];
}
}

-(void)animateTo100:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:@"Right to left" context:nil];
[UIView setAnimationDuration:4];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animateTo200:finished:context:)];
viewToMove.center = CGPointMake(100.0, 100.0);
[UIView commitAnimations];          
}

-(void)animateTo200:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:@"Left to right" context:nil];
[UIView setAnimationDuration:4];
viewToMove.center = CGPointMake(200.0, 200.0);
[UIView commitAnimations];          
}
Это было полезно?

Решение

Вы должны изменить подпись startButtonClicked к - (void)startButtonClicked:(UIGestureRegognizer *)gestureRecognizer а затем запрашивать опознание жеста state свойство в методе. Участок жеста будет вызывать свой метод действий несколько раз с разными состояниями (например, UIGestureRecognizerStateBegan а также UIGestureRecognizerStateEnded).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top