2010-08-15 81 views
0

我正在研究需要从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为弧度/秒旋转,他们暗示当手机静止在桌上时,它正在疯狂地旋转。我勒个去?任何机会我的手机有一个不好的陀螺仪?

回答

1
  • 检查motion不是零(并且error为零)。如果你在nil上调用struct-returning方法,你会得到垃圾数据。
  • 你只打印极端值(看起来你每隔几秒就会得到一个值,而更新率应该更高)。如果您打印所有更新,您可能会对发生的事情有更好的了解。
+0

奇怪的是,事情现在正常。我甚至不知道我为了使它工作而改变了什么,但现在它可以工作。除非我给它一个很好的翻转,否则所有的旋转值现在都在0左右。 – fogelbaby 2010-08-18 13:43:48