2010-06-30 5 views
0

J'utilise ce code pour faire la détection de tremblement, et pour la plupart, il fonctionne très bien:motionEnded fonctionne très bien jusqu'à ce que je clique sur un lien dans un webView

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
if (event.type == UIEventSubtypeMotionShake) { 
    if (event.subtype == UIEventSubtypeMotionShake) 
    { 
    NSLog (@"Shake Called"); 
    } 
} 

Je crois que cela fonctionne, j'ai aussi nécessaire d'utiliser ceux-ci, que j'ai:

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

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

tout cela fonctionne très bien, et motionEnded est appelé à chaque fois que je secoue, jusqu'à ce que je clique par un lien dans un webView sur mon programme. Je peux faire défiler vers le haut et vers le bas dans la vue et secouer fonctionne toujours, mais dès que la vue charge une nouvelle page, motionEnded cesse d'être appelée quand je secoue. Cela se produit à la fois dans le simulateur et sur un appareil réel (iPhone 3G, iOS4). D'après ma compréhension limitée, je crois que cela a quelque chose à voir avec les premiers intervenants, mais je peux me tromper là-bas!

Répondre

2

J'ai réussi à répondre à ma propre question. Pour la référence des autres qui peuvent avoir des problèmes similaires, le problème est que viewController cesse d'être le premier répondeur une fois que vous cliquez sur un lien dans un WebView (ou modifiez une zone de texte, ou une action similaire). Pour résoudre ce problème dans mon cas, la réponse était de faire viewController le premier intervenant à nouveau après la nouvelle page se charge:

- (void)webViewDidFinishLoad:(UIWebView *)nameOfWebView { 
    [self becomeFirstResponder]; 
} 
0

J'ai le même problème, mais devenir la première reponder lorsque la vue Web se termine le chargement ne fonctionne pas Résolvez-le pour moi. Je sais que webViewDidFinishLoad est appelé quand une nouvelle page a été chargée, et je sais aussi que motionEnded est appelée lorsque je me concentre sur la vue web en la tapotant puis en la secouant ou en la simulant.

+0

Jamais esprit, j'ai trouvé la réponse ici: http://stackoverflow.com/questions/1547805/shake-detection-iphone-3-0-not-working je devais avoir cette fonction définie: - (BOOL) canBecomeFirstResponder { return YES; } – Minthos

Questions connexes