2009-12-31 4 views
2

J'ai ce dans mon viewController:événement iPhone Secouer ne fonctionne pas correctement

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { 

    if (event.type == UIEventSubtypeMotionShake) { 

     NSLog(@"I have shaked"); 

    } 
} 

Pourquoi ce ne fonctionne pas? Edit:


je enfait ont ceci:

- (void) viewWillAppear:(BOOL)animated 
{ 
    [shakeView becomeFirstResponder]; 
    [super viewWillAppear:animated]; 
} 
- (void) viewWillDisappear:(BOOL)animated 
{ 
    [shakeView resignFirstResponder]; 
    [super viewWillDisappear:animated]; 
} 

Répondre

3

Si le UIViewController est chargé au tout début de l'application, j'ai vu un problème étrange dans OS 3.0 où il ne deviendrait pas le premier répondeur, sauf si vous avez retardé un peu le message approprié. Essayez de placer

[self performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.3]; 

au sein -loadView ou quelque chose d'autre qui est appelé lorsque le contrôleur est d'abord mis en place.

Il peut y avoir une manière plus élégante de contourner cela, mais cette approche a fonctionné pour moi.

0

Le viewController doit être le premier intervenant lors de la secousse pour recevoir cet événement.

Cela pourrait être une raison pour laquelle cela ne fonctionne pas.

+0

Je l'ai en fait – Jaba