我正在开发一个应用程序,它需要检测到iPhone的旋转手势。我已经编写了一些代码,在CMMotionManager中对旋转数据进行轮询,但是由于某种原因,这些值会不断变化,即使手机在桌子上静止不动。我不知道我在这里做错了什么。我已经咨询过苹果的文档,看起来我正在按照他们的建议做,事情确实没有崩溃,但是得出的数字毫无意义。以下是我要做的:
-(void)startDetectingMotion {
if (!motionQueue){
motionQueue = [[NSOperationQueue mainQueue] retain];
}
if (motionManager.isDeviceMotionAvailable) {
CMDeviceMotionHandler motionHandler = ^ (CMDeviceMotion *motion, NSError *error) {
[self processMotion:motion withError:error];
};
[motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:motionHandler];
}
else {
NSLog(@"motion not available");
}
}
…
-(void)processMotion:(CMDeviceMotion *)motion withError:(NSError *)error {
CMRotationRate rotation = motion.rotationRate;
if(rotation.y > 2 || rotation.y < -2) {
NSLog(@"CM Motion X rotation:%f, Y rotation:%f, Z Rotation:%f", rotation.x, rotation.y, rotation.y);
....
[self stopDetectingMotion];
}
}
Y>2或lt;2的陷阱点是寻找iPhone在水平面上的快速旋转,这正是我要寻找的。
输出如下:
2010-08-15 16:15:43.475 Pokerfoldtest[539:307]cm运动x旋转:11.415660,y旋转:7.865920,z旋转:7.865920
2010-08-15 16:04:33.843 Pokerfoldtest[539:307]cm运动x旋转:8.925084,y旋转:8.414384,z旋转:8.414384
2010-08-15 16:11:14.314 Pokerfoldtest[539:307]cm motion x rotation:10.245130,y rotation:8.243847,z rotation:8.243847
2010-08-15 16:11:16.136 Pokerfoldtest[539:307]cm motion x rotation:10.212860,y rotation:4.303616,z rotation:4.303616
2010-08-15 16:11:18.242 Pokerfoldtest[539:307]cm运动x旋转:9.988654,y旋转:-7.074587,z旋转:-7.074587
2010-08-15 16:11:19.678 Pokerfoldtest[539:307]cm运动x旋转:16.092894,y旋转:-10.562743,z旋转:-10.562743
2010-08-15 16:15:41.662 Pokerfoldtest[539:307]cm运动x旋转:12.854285,y旋转:7.247667,z旋转:7.247667
因为这些数字应该是弧度/秒的旋转,所以他们建议当手机静止在桌子上时,它会剧烈地旋转。我勒个去?有没有可能我的手机陀螺仪坏了?