创建自定义 UIView 的最佳实践是什么?

What is the best practice for creating custom UIView's?

对于创建自定义视图,我有三个选项。

  1. 覆盖

    func drawRect(_ rect: CGRect)

  2. 向视图的图层添加子图层。

  3. 两者都做。

最佳做法是什么?如果我可以在子层中绘制所有内容(更简单 API),为什么我要覆盖 drawRect?

谢谢

drawRect 中渲染意味着您正在使用 CPU 使用 Core Graphics 绘制视图。

如果您可以使用 CALayer 个子层的组合,那么这几乎总是更好的选择,因为繁重的工作随后由 GPU 完成。

最重要的是,drawRect 会在主线程上调用,如果您的绘图代码速度不快,您的应用程序的响应速度会较慢(当然您可以使用后台线程来解决此问题,但您仍将使用 CPU 来绘制位图)。