我正在研究需要从iPhone检测旋转手势的应用程序。我已经编写了轮询CMMotionManager轮换数据的代码,但由于某些原因,即使手机静止在桌面上,这些值也会不断变化。我不确定我在这里做错了什么。我已经咨询了苹果的文档,看起来我正在做他们的建议,而且这个东西确实没有崩溃地运行,但是出来的数字没有意义。下面是我在做什么:Core Motion陀螺旋转出现问题
-(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或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 Motion X旋转:8.925084,Y旋转:8.414384,Z旋转:8.414384
2010-08-15 16:11:14.314 PokerFoldTest [539: 307] CM Motion X旋转:10.245130,Y旋转:-8.243847,Z旋转:-8.243847
2 010-08-15 16:11:16.136 PokerFoldTest [539:307] CM Motion X旋转:10.212860,Y旋转:-4.303616,Z旋转:-4.303616
2010-08-15 16:11:18.242 PokerFoldTest [ 539:307] CM Motion X旋转:9.988654,Y旋转:-7.074587,Z旋转:-7.074587
2010-08-15 16:11:19.678 PokerFoldTest [539:307] CM Motion X rotation: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
因为这些数字是suppo sed为弧度/秒旋转,他们暗示当手机静止在桌上时,它正在疯狂地旋转。我勒个去?任何机会我的手机有一个不好的陀螺仪?
奇怪的是,事情现在正常。我甚至不知道我为了使它工作而改变了什么,但现在它可以工作。除非我给它一个很好的翻转,否则所有的旋转值现在都在0左右。 – fogelbaby 2010-08-18 13:43:48