博客> 图表绘制(1)线条绘制
图表绘制(1)线条绘制
2017-06-27 15:40 评论:1 阅读:965 13162255392

最近公司的项目要用到一些图表效果,本来也打算在github上找一些第三方。然而第三方的风格与公司的需求不尽相同,改动起来较麻烦。于是自己写了一个,并且通用化,现已共享至github上。以下是自己的一些开发历程。

1.刚起手的时候,想完全用Quartz2D来绘制,然而Quartz2D只能绘制一些基本的图形,并不能达到路径绘制的动画效果。想要完全用UIBezierPath(UIBezierPath实际上也是使用OC语法将Quartz2D封装而成,使用更加方便)绘制,有觉得大材小用了,最终觉得使用Quartz2D绘制基本线条和文本描述,UIBezierPath曲线绘制路径动画过程。注意:Quartz2D是使用CPU渲染的,所以在频繁的绘图(比如在touch move方法里面实时更新图形)是会导致cpu的过高占有率,增加能耗和性能压力。

使用Quartz2D绘制时,建议直接在drawRect方法里面进行,这里面提供了一个图形绘制上下文,可以这样获取

  CGContextRef context = UIGraphicsGetCurrentContext();

// 移动到点

   CGContextMoveToPoint(context, start.x, start.y);

//从当前上下文点连接到点

  CGContextAddLineToPoint(context, end.x, end.y);

/ 路径颜色 /

[color setStroke];

/*        路径闭合区域的填充颜色         */

[color setFill];

//设置线段的虚线样式

   CGFloat ss[] = {0.5,2,1};

//解释下如下方法参数:第一个参数是上下文 第二个参数表示距离线段多少的像素点开始绘制虚线 ,第三个表示虚线的绘制规律数组,如上面的ss数组,表示第一段0.5个像素长度为实线,紧接着2个像素的虚线,再接着1个像素的实线。第四个参数表示如果第三个参数传入数组,则执行绘制的虚线规律数组到第几个。如传入2,表示绘制规律为数组中的前两个元素。

   CGContextSetLineDash(context, 0, ss, 2);

在此强调一点:CGContextSetLineDash中的数组应当使用CGFloat(虽然使用其他类型可能不会报错,但是有可能会导致程序崩溃),不要使用float或者double类型数组,因为在iPhone5s及以下,机型为32位操作系统,以上则为64为操作系统,因此,如果使用了float 或者double类型,在iPhone5s及以下会造成程序崩溃,如下为系统对CGFloat的定义。

if defined(LP64) && LP64

define CGFLOAT_TYPE double

define CGFLOAT_IS_DOUBLE 1

define CGFLOAT_MIN DBL_MIN

define CGFLOAT_MAX DBL_MAX

else

define CGFLOAT_TYPE float

define CGFLOAT_IS_DOUBLE 0

define CGFLOAT_MIN FLT_MIN

define CGFLOAT_MAX FLT_MAX

endif

收藏
2
sina weixin mail 回到顶部