0
-(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");
            }
        }
    }
}
4

1 回答 1

2

似乎您以错误的方式进行此操作;而不是运行时钟,您应该设置accelerometerUpdateInterval为您正在寻找并startAccelerometerUpdatesToQueue:withHandler:用于接收数据的任何内容。

苹果文档

以指定的间隔处理运动更新

为了在特定的时间间隔接收运动数据,应用程序调用一个“start”方法,该方法采用一个操作队列(NSOperationQueue 的实例)和一个特定类型的块处理程序来处理这些更新。运动数据被传递到块处理程序中。更新频率由“间隔”属性的值决定。

加速度计。设置 accelerometerUpdateInterval 属性以指定更新间隔。调用 startAccelerometerUpdatesToQueue:withHandler: 方法,传入一个 CMAccelerometerHandler 类型的块。加速度计数据作为 CMAccelerometerData 对象传递到块中。

设置完所有内容后,让它运行。当您收到来自块的完成通知时,请查看您收到的数据。

于 2012-08-02T14:26:46.663 回答