Y a-t-il des problèmes connus avec les reconnaisseurs de gestes et les méthodes de classe UIView pour l'animation?iPhone SDK 3.2 UIGestureRecognizer interférant avec les animations UIView?
Je rencontre des problèmes avec une séquence d'animations sur un rappel UIImageView de UIGestureRecognizer. Si la séquence d'animations est démarrée à partir d'un rappel standard comme TouchUpInside, l'animation fonctionne correctement. Si elle est démarrée via UILongPressGestureRecognizer, la première animation saute à la fin et la deuxième animation commence immédiatement.
Voici un exemple qui illustre mon problème. Dans le .xib pour le projet, j'ai un UIImageView qui est connecté à l'IBOutlet viewToMove. J'ai aussi un UIButton connecté à l'IBOutlet startButton, et j'ai connecté son action TouchUpInside à l'IBAction startButtonClicked. L'action TouchUpInside fonctionne comme je le veux, mais le longPressGestureRecognizer passe à la fin de la première animation après environ une demi-seconde. Quand je NSLog la deuxième animation (animateTo200) je peux voir qu'il est appelé deux fois quand un appui long commence l'animation mais seulement une fois quand l'action de TouchUpInside du bouton commence l'animation.
- (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];
}
Remarque: Veillez également à modifier l'action: '@selector (startButtonClicked:)'. Le colon est nécessaire alors. – bddckr
Merci à tous les deux. Cela a résolu mon problème. Besoin de lire les documents de plus près la prochaine fois. –