之前的文章有提及过现在Drawing里面使用的画图方式:基于系统的CoreGraphics框架的CGContextAddLineToPoint来进行绘制,但是这些都有个问题,你会发现你调用stroke之前,只能设定唯一的宽度,当你调用stroke的时候,该path里面的点都会以这个宽度进行绘制。为了实现宽度可变,原生接口只能采用一个很极端的方式:每两个点就调用一次stroke方法,也就是说每两个点组成一个path,然后改变不同的path的宽度就可以绘制出一条可变宽度的线段。
代码如下:
注:下面的插值方法已经使用了二次贝塞尔方法。
|
|
当然这里使用这样的方法是有很大代价的。每次调用stroke方法,相当于发送一次绘制指令给GPU,每两个点就调用一次,这个十分消耗性能。
更好的做法是使用OpenGLES,把绘制指令的发送交给自己管理,且用OpenGLES可以直接使用三角形条来绘制可变粗细的线条。