2013-04-10 2 views
0

Я не могу работать, чтобы остановить обновления Gyro в моей Cocos2D игре,Стоп обновления гироскоп

Я получил следующий код в моем INIT: `// гироскоп MotionManager = [[CMMotionManager Alloc] инициализации]; referenceAttitude = nil;

[motionManager startGyroUpdates]; 
    timer = [NSTimer scheduledTimerWithTimeInterval:0.2 
              target:self 
              selector:@selector(doGyroUpdate) 
              userInfo:nil 
              repeats:YES]; 

Затем в гироскопе обновиться проверить, когда прогресс более чем 100% if (progress > 100) { [self pauseSchedulerAndActions]; [self stopGyroUpdates];

Тогда:

- (void)stopGyroUpdates{ 
NSLog(@"Stop gyro update"); 

}

но он продолжает проверять ... Так код внутри оператора if продолжает вызываться.

ответ

0

Как сказал рикстер, вам нужно позвонить stopGyroUpdates в экземпляре CMMotionManager. Вам нужно создать переменную или свойство экземпляра в реализации интерфейса.

В файле .m, где ваш объявить интерфейс:

@interface ViewController() 
@property (strong, nonatomic) CMMotionManager *motionManager; 
@end 

Затем инициализировать его, как вам требуется

motionManager = [[CMMotionManager alloc] init]; 

Тогда, когда вам нужно остановить обновления вы называете

[self.motionManager stopGyroUpdates] 
0

Вам нужно вызвать stopGyroUpdates в вашем экземпляре CMMotionManager, а не (или в дополнение к) на себе. (Это означает, что экземпляр должен оставаться за пределами области действия, если метод, по которому вы вызываете startGyroUpdates - скажем, в свойстве или ivar - если этого еще нет.)

0

Я нашел решение со следующим кодом: `

-(void) callgyro:(int)gyroprocess { 


NSLog(@"%i", gyroprocess); 

if (gyroprocess < 100) { 
    motionManager = [[CMMotionManager alloc] init]; 
    referenceAttitude = nil; 
    [motionManager startGyroUpdates]; 
    timertwee = [NSTimer scheduledTimerWithTimeInterval:0.2 
              target:self 
              selector:@selector(doGyroUpdate) 

              userInfo:nil 
              repeats:YES]; 
} 
else { 
    [motionManager stopGyroUpdates]; 
    [timertwee invalidate]; 

    NSLog(@"Gyro moet stoppen!"); 


}` 

и в самом обновлении гироскоп:

if (progress > 100) { 

     [self callgyro:progress]; 

     [self.timer invalidate]; 
     self.timer = nil; 
     [Blikje setImage:[UIImage imageNamed:@"pop3.png"]]; 
     NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
     [prefs setFloat:numhundreds forKey:@"score"]; 
     progress = 0; 

     [self stopGyroUpdates]; 


    } 
Смежные вопросы