【问题标题】:Does CGContextRotateCTM rotate on different rotational speeds on simulator and device?CGContextRotateCTM 在模拟器和设备上是否以不同的转速旋转?
【发布时间】:2010-10-31 02:14:45
【问题描述】:

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

在模拟器上:7.0、7.2、7.2

在设备上:19.3、19.5、19.7

基本上该项目有效,但我想知道为什么设备和模拟器之间存在如此大的差异,我认为 CGContextRotateCTM 可能是来源。

【问题讨论】:

    标签: iphone ios-simulator ios4


    【解决方案1】:

    听起来不错。

    不要忘记,当您运行模拟器时,您实际上是在编译本机代码以在本机 x86 硬件上运行。假设您的 Mac 运行速度比 iPhone 中的 800MHz ARM 芯片快 - 毫无疑问它会在模拟器中运行得更快。

    如果您在应用程序中需要确定性时序,则需要做更多工作才能实现。这就是人们使用 UIView 动画计时、NSTimer 调用或 cocos2d 帧间计时器之类的东西来为他们的动画调用提供确定性时间的地方。

    如果您不这样做 - 当下一代设备配备更快的 CPU 时 - 您的应用将再次陷入混乱。

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

    【讨论】:

    • 谢谢布拉德,这也证实了我认为可能是问题所在。您是否有任何显示确定性时序的特定示例?我记得我的 IBM 386 有 Turbo 按钮哈!
    • 您可以像在 cocos2d 中一样通过在“drawRect”末尾调用 UIView 的“setNeedsDisplay”来实现此功能 - 同时 跟踪 last drawRect - 这样你就可以看到你的更新速度有多快 - 就像在 Cocos2d 中一样。这将使事件循环继续向您发送重绘事件 - 您可以采取行动 - 同时获取 currentlast drawRect 时间之间的差异来确定多远你的“动画”应该“移动”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2015-04-10
    • 1970-01-01
    • 2021-03-20
    • 2015-03-16
    相关资源
    最近更新 更多