2010-10-31 71 views
0

我有一个项目,它可以随着时间的推移以不同的速度旋转2个360度的主轴。我注意到它在模拟器上运行良好,但是当我在一个设备上测试时,它显着变慢。使在模拟器和设备前3个完整旋转拍摄的时间是:CGContextRotateCTM在模拟器和设备上以不同的旋转速度旋转吗?

在模拟器:7.0,7.2,7.2

在设备:19.3,19.5,19.7

从本质上讲,项目工程但我想知道为什么设备和模拟器之间有这么大的差异,我认为CGContextRotateCTM可能是源代码。

回答

1

听起来没错。

不要忘了,当你运行模拟器时,你实际上正在编译本地代码以在本地x86硬件上运行。假设你的Mac运行速度比iPhone中的800MHz ARM芯片快 - 毫不奇怪,它将在模拟器中运行得更快。

如果您需要确定性的时间在您的应用程序,您需要更多的工作来实现这一目标。这是人们使用诸如UIView动画定时,NSTimer调用或者cocos2d帧间定时器之类的东西给动画调用给出确定性时间的地方。

如果您不这样做 - 当下一代设备出现更快的CPU时 - 您的应用程序将再次混乱。

还记得他们曾经在PC上使用“Turbo”按钮来处理这个问题吗? :-O

+0

谢谢布拉德,这证实了我认为可能是问题。你有任何具体的例子显示确定性的时间?我记得我的IBM 386有Turbo按钮! – Azeworai 2010-10-31 05:28:03

+0

您可以通过在“drawRect”的末尾调用UIView的“setNeedsDisplay”来实现这一功能,就像在cocos2d中一样 - 同时*保留* last * drawRect的绝对时间*,因此您将能够看到快速更新 - 就像在Cocos2d中一样。这将使事件循环继续向您发送重绘事件 - 您可以采取行动 - 同时考虑* current *和* last * drawRect时间之间的差异,以确定您的“动画”应该“移动”多远。 – Brad 2010-10-31 19:13:00