IOS 学习之绘图( Core Graphics 教学)

IOS 绘图 总结

Core Graphics

IOS中绘图的三种方式

  1. 在UIKit控件中,的drawInReat方法中通过 Core Graphics 框架来绘制图形
  2. 使用 Core Animation 层,并通过委托向Core Animation提供视图内容
  3. 通过 OpenGL ES 渲染图形

定义: Core Graphics 是一套基于C语言的API框架.使用 Quartz绘图引擎.

使用 Core Graphics 绘图

基本概念:图形上下文 CGContentRef

考虑到效率方面上的问题,通常我们不会创建。直接获取
通过

func UIGraphicsGetCurrentContext() -> CGContext?

获取图形上下文

默认情况下返回值为 nil.在调用这个方法之前调用

    drawRect: 

方法,视图将创建一个绘图上下文,并且设置为 the current context(当前上下文,也就是绘图图层栈栈顶的上下文).这个上下文context只会在drawRect:方法中存在.一旦调用此方法调用完成,这个上下文 context 将会被销毁.
如果你不是使用UIView去绘制,这时候你需要手动往栈顶入一个。使用下面的方法

    UIGraphicsPushContext(_:) 

这个方法可以在app中的任何线程中调用.

绘制路径 CGPath

CGPath也就是路径信息。CGPath可以确定 绘制边框的各种属性(颜色 粗细 拐点),边框内部区域的绘图属性, 绘制边框还是绘制边框内部

创建路径

CGMutablePathRef path =  CGPathCreateMutable();

在绘制路径时

CGContextDrawPath(CGContextRef __nullable c,  CGPathDrawingMode mode)   

需要指定绘制路径时模式

CGPathDrawingMode

    * kCGPathFill
        Render the area contained within the path using the non-zero winding number rule.
        
    * kCGPathEOFill
        Render the area within the path using the even-odd rule.
    
    * kCGPathStroke
        Render a line along the path.
        
    * kCGPathFillStroke
        First fill and then stroke the path, using the nonzero winding number rule.
        
    * kCGPathEOFillStroke
        First fill and then stroke the path, using the even-odd rule.

仿射变换 CGAffineTransform

CGAffineTransform 是一个结构体

struct CGAffineTransform {
    CGFloat a, b, c, d;
    CGFloat tx, ty;
};

系统已经帮我封装好了一下方法

  1. 平移 CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
  2. 缩放 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
  3. 旋转 CGAffineTransformMakeRotation(CGFloat angle)

绘制虚线

CGFloat lengths[2] = { 18, 9 };
CGContextSetLineDash(context, 0, lengths, 2);

用于绘制虚线

绘制阴影

CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 0, [UIColor blackColor].CGColor);

认识专有名词

line : 线
width: 宽度
cap: 顶点 路径的开始跟结束的点
join: 连接点
dash: 虚线

你可能感兴趣的:(IOS 学习之绘图( Core Graphics 教学))