是否有任何经验法则来决定是覆盖 UIView 的绘制功能,还是在实现子视图时使用 CAShapeLayer?
Is there any rule of thumb, to decide whether to override UIView's draw function, or using CAShapeLayer when implementing subview?
目前,我有以下自定义视图
对于色轮(右边的组件)和亮度条(左边的组件),我正在通过覆盖 UIView
的 draw
函数来实现。
对于可移动的black/white小圆圈,我正在使用CAShapeLayer
实现。
我想知道,是否有任何好的经验法则来决定是覆盖 UIView
的 draw
函数,还是在实现子视图时使用 CAShapeLayer
?
目前,我个人的经验法则是
- 当绘图是静态的时候,我会通过重写UIView的draw函数来实现
- 当绘图可移动/动态时,我将使用 CAShapeLayer 实现。原因是,每当我移动对象时,我只需执行
addSublayer
,而无需调用 setNeedsDisplay
,这(也许)可能有助于提高性能?
请问有什么经验法则来决定是覆盖UIView的绘图功能,还是在实现子视图时使用CAShapeLayer?
无论您使用视图还是图层,渲染树都没有任何区别。就屏幕渲染而言,视图 是 层。视图“仅仅是”一层加上可触摸性。图层可以像视图一样使用图形上下文绘制;这实际上就是视图绘制所做的(视图只是层的委托)。
使用形状层的原因是它方便(它只是表示一条贝塞尔曲线路径)并且它的属性是可动画的。
使用视图的原因是为了获得可触摸性和自动布局。
您可以通过创建视图将其底层 是 形状层来结合这两者。
目前,我有以下自定义视图
对于色轮(右边的组件)和亮度条(左边的组件),我正在通过覆盖 UIView
的 draw
函数来实现。
对于可移动的black/white小圆圈,我正在使用CAShapeLayer
实现。
我想知道,是否有任何好的经验法则来决定是覆盖 UIView
的 draw
函数,还是在实现子视图时使用 CAShapeLayer
?
目前,我个人的经验法则是
- 当绘图是静态的时候,我会通过重写UIView的draw函数来实现
- 当绘图可移动/动态时,我将使用 CAShapeLayer 实现。原因是,每当我移动对象时,我只需执行
addSublayer
,而无需调用setNeedsDisplay
,这(也许)可能有助于提高性能?
请问有什么经验法则来决定是覆盖UIView的绘图功能,还是在实现子视图时使用CAShapeLayer?
无论您使用视图还是图层,渲染树都没有任何区别。就屏幕渲染而言,视图 是 层。视图“仅仅是”一层加上可触摸性。图层可以像视图一样使用图形上下文绘制;这实际上就是视图绘制所做的(视图只是层的委托)。
使用形状层的原因是它方便(它只是表示一条贝塞尔曲线路径)并且它的属性是可动画的。
使用视图的原因是为了获得可触摸性和自动布局。
您可以通过创建视图将其底层 是 形状层来结合这两者。