是否有任何经验法则来决定是覆盖 UIView 的绘制功能,还是在实现子视图时使用 CAShapeLayer?

Is there any rule of thumb, to decide whether to override UIView's draw function, or using CAShapeLayer when implementing subview?

目前,我有以下自定义视图

对于色轮(右边的组件)和亮度条(左边的组件),我正在通过覆盖 UIViewdraw 函数来实现。

对于可移动的black/white小圆圈,我正在使用CAShapeLayer实现。

我想知道,是否有任何好的经验法则来决定是覆盖 UIViewdraw 函数,还是在实现子视图时使用 CAShapeLayer

目前,我个人的经验法则是

  1. 当绘图是静态的时候,我会通过重写UIView的draw函数来实现
  2. 当绘图可移动/动态时,我将使用 CAShapeLayer 实现。原因是,每当我移动对象时,我只需执行 addSublayer,而无需调用 setNeedsDisplay,这(也许)可能有助于提高性能?

请问有什么经验法则来决定是覆盖UIView的绘图功能,还是在实现子视图时使用CAShapeLayer?

无论您使用视图还是图层,渲染树都没有任何区别。就屏幕渲染而言,视图 层。视图“仅仅是”一层加上可触摸性。图层可以像视图一样使用图形上下文绘制;这实际上就是视图绘制所做的(视图只是层的委托)。

使用形状层的原因是它方便(它只是表示一条贝塞尔曲线路径)并且它的属性是可动画的。

使用视图的原因是为了获得可触摸性和自动布局。

您可以通过创建视图将其底层 形状层来结合这两者。