我无法在我的Cocos2D游戏中停止陀螺更新,
我的init中有以下代码:`// gyro motionManager = [[CMMotionManager alloc] init]; 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 :(得分:0)
您需要在CMMotionManager的实例上调用stopGyroUpdates,而不是(或者除此之外)调用self。 (这意味着如果你调用startGyroUpdates的方法 - 例如,在属性或ivar中 - 如果它还没有,则实例需要超出范围。)
答案 1 :(得分:0)
就像rickster所说,你需要在CMMotionManager实例上调用stopGyroUpdates。所以你需要在接口实现中创建一个实例变量或属性。
在您声明界面的.m文件中:
@interface ViewController ()
@property (strong, nonatomic) CMMotionManager *motionManager;
@end
然后根据需要初始化
motionManager = [[CMMotionManager alloc] init];
然后,当您需要停止更新时,请致电
[self.motionManager stopGyroUpdates]
答案 2 :(得分: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];
}