在绘制CAShapeLayers时,应该从drawRect()
还是layoutSubviews()
调用?
根据苹果关于UIView的文档,绘制操作应放在drawRect()
中。
然而,在Kevin Cathey的WWDC Session: What's New in Interface Builder(他演示了构建可在Interface Builder中访问的自定义UIView的过程)中并非如此。
在演示中,他在layoutSubviews
中执行视图的绘制,而不是在drawRect
中。
他的解释是:
如果我实现
drawRect
,那么性能就不会太好,而使用子层和子视图会给我们带来非常好的性能。
根据我在StackOverflow上阅读到的内容,重写drawRect()
方法可能会导致性能降低。这部分原因是因为setNeedsDisplay
触发手动重绘是比较昂贵的。
从苹果文档和实际应用来看,drawRect()
负责视图的绘制,而 layoutSubviews()
则处理定位。