停止陀螺仪更新

时间:2013-04-10 11:56:46

标签: ios xcode cocos2d-iphone core-motion

我无法在我的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语句中的代码不断被调用。

3 个答案:

答案 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];


    }