2011-03-02 53 views
1

编程的iOS,我有一个复合自定义视图组成的许多UIViews。这个复合材料中的一些UIViews负责为一些自定义着色绘制阴影和其他元素。阴影和阴影需要在UIRotationGestureRecognizer识别旋转时重绘。然而,旋转的速度远非令人满意。当我注释掉setNeedDisplay时,旋转速度很好。但是,如果我确实调用了setNeedDisplay,那么即使我评论了阴影和阴影视图的所有drawRects中的所有内容,旋转仍然显着。自定义UIview自由旋转太慢

有没有什么建议来加快速度?

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

回答

0

太频繁地调用setNeedsDisplay:,尤其是每一帧都会很慢。 setNeedsDisplay在CPU上运行,而不是在GPU上运行。在旋转和缩放期间不要重绘视图。等到动画结束,然后致电setNeedsDisplay:“渲染”最终位置。

看看UIKit的观点如何不同处理大型动画:

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

  • ZoomingPDF示例代码(请参阅Apple开发人员文档)显示了如何缩放PDF并不是实时呈现,而是在缩放饰面。

希望这会有所帮助。

+0

感谢您的建议。不幸的是,阴影和阴影模仿3D对象,并且需要在旋转过程中重绘,否则它看起来很奇怪。但是,谢谢你指出mapkit和pdf的例子。 – huggie

+0

UIKit可能不适用于您尝试实现的效果。 – bentford

+0

你可能是对的。我认为这样做太慢了。我会给你正确的答案。 – huggie