Ios CALayer vs CGContext,哪种设计方法更好?
我一直在做一些iOS绘图的实验。为了做一个实践练习,我编写了一个条形图组件。下面是类图(我不允许上传图片),所以让我用文字来写。我有一个从UIView继承的NGBarChartView,它有两个协议NGBarChartViewDataSource和NGBarChartViewDelegate。代码在 为了绘制条形图,我将每个条形图创建为一个不同的图层。我这样做的原因有两个,第一,我可以创建一个UIBezierPath并将其附加到CAShapeLayer对象上;第二,我可以使用[Layer hitTest]方法轻松跟踪barItem是否被触摸。这个组件工作得很好。然而,我对绘制柱状图的方法并不满意。因此,本说明。我需要以下方面的专家意见Ios CALayer vs CGContext,哪种设计方法更好?,ios,calayer,cgcontext,drawrect,cashapelayer,Ios,Calayer,Cgcontext,Drawrect,Cashapelayer,我一直在做一些iOS绘图的实验。为了做一个实践练习,我编写了一个条形图组件。下面是类图(我不允许上传图片),所以让我用文字来写。我有一个从UIView继承的NGBarChartView,它有两个协议NGBarChartViewDataSource和NGBarChartViewDelegate。代码在 为了绘制条形图,我将每个条形图创建为一个不同的图层。我这样做的原因有两个,第一,我可以创建一个UIBezierPath并将其附加到CAShapeLayer对象上;第二,我可以使用[Layer hit
Murali在我看来,一般来说,任何一种绘图形状都需要强大的处理能力。用GPU合成缓存的位图比再次绘制所有位图便宜得多。因此,在许多情况下,我们将所有图形缓存到位图中,在iOS中,
CALayer
负责此操作
无论如何,如果位图超过了视频内存限制,Quartz无法一次合成所有层。因此,石英必须在多个相位上绘制单个帧。这需要将一些纹理重新加载到GPU中。这可能会影响性能。我对此不确定,因为众所周知iPhone VRAM与系统RAM集成在一起。不管怎么说,即使是那个案子也需要更多的工作。即使系统内存不足,系统也可以清除现有位图并要求稍后重新绘制
CAShapeLayer
将代替您完成所有的CGContext
(我相信您的意思)工作。如果你觉得需要更低级的优化,你可以自己做我希望这能有所帮助。真正了解情况的唯一方法是尝试这两种方法并分析您的表现。。但正如@eonil所建议的,我将从CALayer开始,使用CAShapeLayer对CGPath进行任何渲染。我敢打赌那是最快的,除非是在非常有限的情况下。如果发现遇到性能问题,也可以尝试使用CATiledLayer。