2011-01-27 3 views
1

Je détecte une secousse qui va démarrer l'animation, et quand elle se termine, elle cesse d'animer. Parfois, cela fonctionne, mais parfois, il ne réalise pas que le tremblement est terminé, donc il n'appellera jamais la méthode motionEnded. Quelqu'un d'autre a-t-il eu ce problème? Solutions?Objectif C: Secouer les problèmes

-(BOOL)canBecomeFirstResponder { 
return YES; 
} 

-(void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:NO]; 
[self becomeFirstResponder]; 
} 

-(void)viewWillDisappear:(BOOL)animated { 
[super viewWillDisappear:NO]; 
} 

-(void)viewDidDisappear:(BOOL)animated { 
[self resignFirstResponder]; 
[super viewDidDisappear:NO]; 
} 

-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
if (event.type == UIEventSubtypeMotionShake) 
{ 
    NSLog(@"1"); 
    [img startAnimating]; 
} 
} 

-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
if (event.type == UIEventSubtypeMotionShake) 
{ 
    NSLog(@"3"); 
    [img stopAnimating]; 
} 
} 

Répondre

0

Apple semble discuter de la "contradiction" vous rencontrez ici: http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

Dans la liste 4-2, il se lit comme suit:

... Cependant, il est important différence entre les événements tactiles et événements de mouvement en mouvement. Lorsque l'utilisateur commence à secouer l'appareil, le système envoie un événement de mouvement au premier répondeur dans un message motionBegan: withEvent: ; Si le premier répondeur ne gère pas l'événement, il parcourt jusqu'à la chaîne du répondeur. Si la secousse dure moins d'une seconde, le système envoie un message motionEnded: withEvent: au premier répondeur. Si le dure plus longtemps ou si le système détermine que le mouvement n'est pas un , le premier répondeur reçoit un message motionCancelled: withEvent:.

Je suggère d'ajouter un motionCancelled: rappel withEvent pour voir si c'est ce qui se passe dans les cas où vous ne recevez pas un appel motionEnded.