iPhone SDK 3.2 UIGestureRecognizer мешает анимации UIView? - PullRequest
0 голосов
/ 23 апреля 2010

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

У меня проблемы с последовательностью анимаций в UIImageView из обратного вызова UIGestureRecognizer. Если последовательность анимаций запускается из стандартного обратного вызова, такого как TouchUpInside, анимация работает нормально. Если он запускается через UILongPressGestureRecognizer, то первая анимация переходит в конец, и сразу начинается вторая анимация.

Вот пример, который иллюстрирует мою проблему. В .xib для проекта у меня есть UIImageView, который подключен к IBOutlet viewToMove. У меня также есть UIButton, подключенный к IBOutlet startButton, и я подключил его действие TouchUpInside к IBAction startButtonClicked. Действие TouchUpInside работает так, как я хочу, но longPressGestureRecognizer пропускает до конца первой анимации примерно через полсекунды. Когда я запускаю вторую анимацию (animateTo200), я вижу, что она вызывается дважды, когда долгое нажатие запускает анимацию, и только один раз, когда действие TouchUpInside кнопки начинает анимацию.

- (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];          
}

1 Ответ

4 голосов
/ 24 апреля 2010

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

...