2012-11-21 15 views
6

Jestem trochę nowy w rozwoju aplikacji. W viewController (VPviewController) Mam następujący kod:xcode ios 6 wstrząsnąć wywołaniami ruchu z poprzedniego widoku

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

w innym viewController (VPgameViewController) Mam inną imprezę MotionShake:

- (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]; 
     } 
    } 
} 

kiedy jestem w VPgameView i potrząsnąć Iphone wywołuje również funkcję startGame, która znajduje się w innym zdarzeniu viewController.

Jak mogę to zatrzymać?

+0

Może to (http://stackoverflow.com/questions/1342674/motionbegan-not-working) pomaga – basvk

+0

W obu widokach mogę zostać pierwszym ratownikiem i zrezygnować z pierwszej odpowiedzi. Ale to nie pomaga. –

+0

Czy chcesz wykryć ruch w Xcode lub na iOS? Jeśli to drugie, proszę nie mylić iOS z Xcode. Nie trzeba Xcode do pisania aplikacji na iOS. –

Odpowiedz

2

Wygląda na to, że musisz anulować subskrypcję swojego VPViewController przed otrzymaniem powiadomienia o wstrząśnięciu w jego funkcji viewWillDisappear:.

Ogólnie rzecz biorąc, jeśli chcesz, aby kontrolka viewController otrzymywała określone powiadomienia o zdarzeniach tylko wtedy, gdy jest widoczna, należy zasubskrybować powiadomienie w funkcji viewWillAppear: i anulować subskrypcję w funkcji viewWillDisappear:.

+0

Jaki jest najlepszy sposób na zrobienie tego? –

+1

Aby kontrolować, czy obiekt viewController reaguje na gest wstrząsu, należy wprowadzić zmienną klasy 'BOOL replysToShakeGesture' dla' viewController'. W funkcjach 'motionBegan' i' motionEnded' zwracają się natychmiast, jeśli ta wartość bool jest nieprawidłowa. Wreszcie, w funkcji 'viewWillAppear:' ustaw wartość bool na wartość true iw funkcji 'viewWillDisappear:' ustaw wartość bool na false. – kadam

Powiązane problemy