-(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");
}
}
}
}
答案 0 :(得分:2)
看起来你正在以错误的方式解决这个问题;您应该将accelerometerUpdateInterval
设置为您正在寻找的任何内容,并使用startAccelerometerUpdatesToQueue:withHandler:
来接收数据,而不是运行时钟。
以指定间隔处理动作更新
接收动作数据 在特定的时间间隔,应用程序调用“启动”方法 获取操作队列(NSOperationQueue的实例)和块 用于处理这些更新的特定类型的处理程序。动议 数据传递到块处理程序。更新的频率是 由“间隔”属性的值决定。
加速度计。设置要指定的accelerometerUpdateInterval属性 更新间隔。打电话给 startAccelerometerUpdatesToQueue:withHandler:方法,传入一个 CMAccelerometerHandler类型的块。加速度计数据通过 作为CMAccelerometerData对象进入块。
一旦你完成了一切,就让它运行。当您收到阻止完成通知后,请查看您收到的数据。