如何为此代码实现计时器?

时间:2012-08-02 14:10:59

标签: iphone objective-c ios timer accelerometer

-(void) play
{
    CMMotionManager *motionManager = [[CMMotionManager alloc] init];
    [motionManager startDeviceMotionUpdates];

    BOOL timeReached = NO;

    while(!self.stopButtonPressed)
    {
        if(motionManager.deviceMotion.userAcceleration.y >= ... && motionManager.deviceMotion.userAcceleration.y <= ...)
        {
             //start timer
        }
        while(motionManager.deviceMotion.userAcceleration.y >= ... && motionManager.deviceMotion.userAcceleration.y <= ... && !timeReached)
        {
            if(//check timer & if timer is >=300ms)
            {
              timeReached = YES;
              NSLog(@"acceleration on Y-axis stayed between ... & .. for at least 300ms");
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

看起来你正在以错误的方式解决这个问题;您应该将accelerometerUpdateInterval设置为您正在寻找的任何内容,并使用startAccelerometerUpdatesToQueue:withHandler:来接收数据,而不是运行时钟。

来自the Apple documentation

  

以指定间隔处理动作更新

     

接收动作数据   在特定的时间间隔,应用程序调用“启动”方法   获取操作队列(NSOperationQueue的实例)和块   用于处理这些更新的特定类型的处理程序。动议   数据传递到块处理程序。更新的频率是   由“间隔”属性的值决定。

     

加速度计。设置要指定的accelerometerUpdateInterval属性   更新间隔。打电话给   startAccelerometerUpdatesToQueue:withHandler:方法,传入一个   CMAccelerometerHandler类型的块。加速度计数据通过   作为CMAccelerometerData对象进入块。

一旦你完成了一切,就让它运行。当您收到阻止完成通知后,请查看您收到的数据。