0

我有一个CMMotionManager设置与deviceMotionUpdateInterval设定在像100 HZ这样:CABasicAnimation性能问题阻止

motionManager = [[CMMotionManager alloc] init]; 
motionManager.deviceMotionUpdateInterval = 1/100.0; 

我使用像这样的模块,从陀螺仪获取偏航值

 [motionManger startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) { //get yaw values}]; 

我也有一个CABasicAnimation,在同一个区块中进行动画制作。我将每个动画的持续时间设置为0.01秒。动画是一个圆形进度条,表示该设备旋转了多少度。这可以在iPhone 5上正常工作。但是在iPhone 4和4S等较旧的设备上,进度条被填充和设备旋转的实际程度值之间存在显着的延迟。基本上,如果电话已经快速旋转了180度,进度条的填充速度要慢得多,才能达到180度。在iPhone 5上的相同情况下,进度条将立即处于180度的角度。

我的问题是,我可以做些什么来提高性能,以便动画像iPhone 5一样平滑和瞬间准确?

+0

使用工具来弄清楚发生了什么。您可能正在争夺CPU。 iPhone 5拥有双核心CPU,因此它确实是多线程的。 iPhone 4,我猜测,动画无法启动,因为我们一直在通过对你的偏航更新块的呼叫而受到打击。 – matt 2013-03-22 20:50:46

+0

你能建议在仪器中准确地监测什么吗? CPU时间?动画帧率? – thisiscrazy4 2013-03-22 22:08:44

+0

是的,我认为你可以做一个时间分析器,看看什么是放慢动画。 – matt 2013-03-22 23:46:36

回答

0

我刚刚回答了一个类似的问题here

简而言之,块方法具有相当大的开销,并且您需要以您选择的时间间隔手动轮询CMMotionManager。详细信息请参见CMMotionManager类参考中的“运动数据的周期性采样”。