自定义UIview自由旋转太慢

时间:2011-03-02 13:41:58

标签: ios drawrect

iOS编程,我有一个由许多UIView组成的复合自定义视图。此复合材料中的一些UIViews负责绘制阴影,其他人则负责某些自定义阴影。在UIRotationGestureRecognizer识别旋转时,需要重新绘制阴影和阴影。然而,旋转的速度远远不能令人满意。当我注释掉setNeedDisplay时,转速很好。但是,如果我调用setNeedDisplay,即使我在所有drawRects中注释阴影和着色视图中的所有内容,旋转仍然会显着滞后。

有什么建议可以加快速度吗?

我可以想到一个可能的解决方案:确保系统在旋转时不经常调用drawRect。但我不知道该怎么做,也不知道这是不是最好的解决方案。任何建议表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

过于频繁地调用setNeedsDisplay:,尤其是每一帧都会很慢。 setNeedsDisplay在CPU上运行,而不是在GPU上运行。在旋转和缩放过程中不要重绘视图。等到动画结束,然后调用setNeedsDisplay:到#34;渲染"最后的位置。

看看各种UIKit视图如何处理大型动画:

  • 当MapKit放大时,地图图像会缩放并看起来模糊。一旦缩放手势停止,它将以该比例呈现新图像。 (在这种情况下,图像是从互联网上下载的,但它仍然说明了这一概念。)

  • ZoomingPDF示例代码(请参阅apple developer docs)显示了缩放PDF并不是实时渲染,而是在缩放完成后。

希望这有帮助。