应该从drawRect()
或layoutSubviews()
调用CAShapeLayers图纸吗?自定义UIView绘图与layoutSubviews vs drawRect
根据苹果有关UIViews的文档,绘图操作应该放在drawRect()
。
然而,凯文卡特的WWDC会议中并不是这种情况:What's New in Interface Builder(他演示了在Interface Builder中可访问的构建自定义UIView的过程)。
在他的演示中,他执行layoutSubviews
中的视图绘制,而不是drawRect
。
他的解释是:
如果我要实现的drawRect,这不会让我们的最佳表现;而使用子层和子视图将会使我们获得非常好的表现。
从我迄今为止在StackOverflow上读到的内容来看,重写drawRect()
方法可能会导致性能下降。这部分归因于setNeedsDisplay
触发手动重画是昂贵的。
但通过Apple文档和现实世界的应用程序。有意义的是drawRect()
应该负责View的绘制,并且layoutSubviews()
应该负责处理定位。