2012-11-21 9 views
6

Ich bin ein bisschen neu in der App-Entwicklung. In einem Viewcontroller (VPviewController) Ich habe den folgenden Code:xcode ios 6 schütteln bewegungsanrufe IBaktion von vorheriger Sicht

- (void) motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{ 
    if (motion == UIEventSubtypeMotionShake){  
     [self startGame:nil]; 
    } 
} 

In einem anderen Viewcontroller (VPgameViewController) Ich habe eine andere MotionShake Veranstaltung:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{ 
    if(event.subtype == UIEventSubtypeMotionShake){ 
     if(count < 3){ 

      [self changeText:nil]; 
      AudioServicesPlaySystemSound(1016); 
      count++; 

     }else{ 

      count = 0; 
      AudioServicesPlaySystemSound(1024); 
      UIStoryboard *storyboard = self.storyboard; 
      VPpoepViewController *shit = [storyboard instantiateViewControllerWithIdentifier:@"PoepViewController"]; 
      shit.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
      [self presentViewController:shit animated:YES completion:nil]; 
     } 
    } 
} 

Wenn ich in der VPgameView bin und ich schüttle Das iPhone ruft auch die StartGame-Funktion auf, die sich in einem anderen ViewController-Shake-Event befindet.

Wie kann ich das stoppen?

+0

Vielleicht hilft dies (http://stackoverflow.com/questions/1342674/motionbegan-not-working) – basvk

+0

In beiden Ansichten habe ich kann Ersthelfer werden und First-Responder zurücktreten. Aber das hilft nicht. –

+0

Möchten Sie die Bewegung in Xcode oder in iOS erkennen? Wenn letzteres, bitte nicht verwirren iOS mit Xcode. Man benötigt keinen Xcode zum Schreiben von iOS-Anwendungen. –

Antwort

2

Klingt so, als müssten Sie Ihre VPViewController abbestellen, bevor Sie die Benachrichtigungen über das Shake Event in der viewWillDisappear: Funktion erhalten.

Wenn Sie möchten, dass Ihr viewController bestimmte Ereignisbenachrichtigungen nur dann erhält, wenn sie sichtbar sind, sollten Sie die Benachrichtigung in der Funktion viewWillAppear: abonnieren und in der Funktion viewWillDisappear: abbestellen.

+0

Was ist der beste Weg, dies zu tun? –

+1

Um zu steuern, ob ein ViewController auf eine Shake-Geste reagiert, sollten Sie eine Klassenvariable 'BOOL respontsToShakeGesture' für den' viewController' einführen. In den Funktionen "motionBegan" und "motionEnded" kehren Sie sofort zurück, wenn dieser Bool-Wert falsch ist. Schließlich, in der 'viewWillAppear:' Funktion setzen Sie den bool Wert auf true und in der 'viewWillDisappear:' Funktion setzen Sie den bool Wert auf false. – kadam