我有一个应用程序,其视图在加载时会获得常规的设备动作更新(每秒20次)并使用它们在屏幕上显示内容。使用旧的(已弃用的)UIAccelerometer
代码可以正常工作。
我已将其移植到使用Core Motion和CMMotionManager
,但我遇到的问题是每次加载其中一个视图(第一次除外),第一次收到的只有一个或两个更新大约二,然后他们开始按预期收到(每秒20次)。
视图中的相关代码:
- (void)viewDidLoad {
[super viewDidLoad];
// Register to receive acceleration from motion manager.
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.05;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error) {
// Handle motion and update UI here.
}
];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// Stop the motion updates.
[motionManager stopDeviceMotionUpdates];
}
- (IBAction)exitView:(id)sender {
// Stop the motion updates.
[motionManager stopDeviceMotionUpdates];
// Pop the view from the navigation controller.
}
我已经添加了一些NSLog
语句,并且可以在视图加载后确认正在请求动态更新,并且处理程序仅接收更新,如上所述。
我有什么遗漏可以让CoreMotion版本的行为与旧版本相同,即没有延迟?