我在我的项目中包含了CoreMotion框架,并在我的视图控制器的标题中导入了CoreMotion框架:
#import <CoreMotion/CoreMotion.h>
然后在-viewDidLoad中我有这个简单的测试代码,我在iOS 4的iPhone 4上运行:
- (void)viewDidLoad {
[super viewDidLoad];
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
[motionManager setDeviceMotionUpdateInterval:0.1];
CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
NSLog(@"foo");
};
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler];
NSLog(@"merde!");
}
当我在设备上运行项目并移动它时,我从未得到“foo”日志。此外,我尝试在运动处理程序块中设置断点,它永远不会停止。但我确实得到了“merde!”记录,所以这段代码肯定会被执行。
为什么核心动议没有调用我的处理程序?我的iPhone 4功能齐全。加速度计和陀螺仪在其他应用程序中完美运行。没有硬件错误。
答案 0 :(得分:1)
我有非常相似的代码运行成功,同样适用于Event Handling Guide for iOS中的可用样本(陀螺仪数据只有一个合适的样本)。但是有一个主要区别:
所有实现都使用operationQueue = [[NSOperationQueue currentQueue] retain];
拥有自己对opereation队列的引用,或者构建自己的实现。所以希望这有助于在你的日志中获得超过'merde'; - )