Core Graphics核心绘图 ( 一)

1)什么是 Graphics(核心绘图)

  • Core Graphics 是核心绘图框架,其中的 Quartz 2D API 专门提供图形绘制工作
  • 所有 UIKit 的底层渲染工作都是由 Core Graphics 完成的
  • 由于与 UIKit 绑定的非常紧密,因此开发时,引入 UIKit 框架的同时会自动引入 Core Graphics框架

    2)什么是 Quartz 2D?

  • 是一个二维绘图引擎

  • 同时支持iOS和Mac系统,是跨平台的 是纯c语言
  • 数据类型和函数都是CG作为前缀,例如:
          CGContextRef
          CGPathRef
          CGContextStrokePath
  • 数据类型不需要使用 “*”
  • 需要注意内存管理

3)图形与图像:

图形: 以几何模型来描述画面
图像: 以点和颜色方式来描述画面

4)渲染:

以在屏幕上显示为例,所谓渲染就是在显示之前,按照几何模型的定义转换成对应图像的过程

5) Quartz 2D 能完成的工作

  • 绘制图形:线条\三角形\矩形\圆\弧形
  • 绘制文字
  • 绘制\生成图片(图像)
  • 读取\生成PDF
  • 截图\裁剪图片
  • 自定义 UI 控件

6)使用 Quartz2D 绘图的基本步骤

  • 自定义 view
  • 重写 drawRect 方法
  • 代码顺序
    • 获取图形上下文
    • 创建路径对象(添加路径)
    • 设置路径属性
    • 渲染

7)图形上下文 (UIGraphicsGetCurrentContext)

  • 图形上下文(Graphics Context):是一个 CGContextRef 类型的数据
  • 相同的一套绘图序列,指定不同的 Graphics Context,就可将相同 的图像绘制到不同的目标上
  • 图形上下文中主要包含如下信息
    • 绘图路径(各种各样的图形)
    • 绘图状态(颜色、线宽、样式、旋转、缩放、平移、图片裁剪区域等)
    • 输出目标(绘制到什么地方去?UIView、图片、pdf、打印机等

绘图步骤示意图

这里写图片描述

8)路径

表示几何形状的结构体,例如:线条,矩形,圆,弧线等

9)基本图形绘制

1.矩形

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();       //上下文
    CGContextAddRect(ctx, CGRectMake(50, 50, 200, 200));
//矩形大小
    CGContextStrokePath(ctx);
//渲染

效果:
这里写图片描述

2)画一条直线

  - (void)drawRect:(CGRect)rect {  
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
//上下文
    CGContextMoveToPoint(ctx, 50, 50);
//起始点
    CGContextAddLineToPoint(ctx, 200, 200);
//目标点
    CGContextStrokePath(ctx);
//渲染

效果:
这里写图片描述

3)三角形

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();  //上下文
    CGContextMoveToPoint(ctx, 50, 50);
//添加一个点
    CGContextAddLineToPoint(ctx, 50, 200) ; 
 //添加一条线
    CGContextAddLineToPoint(ctx, 200, 200);
 //添加一条线
    CGContextClosePath(ctx); 
//关闭路径:从最后一条线的终点与起始点连线,建立一个封闭的路径
    CGContextStrokePath(ctx);
    }

效果:
这里写图片描述

4) 内切圆形

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();  //上下文
    CGContextAddEllipseInRect(ctx, CGRectMake(50, 50, 200, 100));
//50,50为中心点, 200为水平直径,100为垂直直径,当水平和垂直直径相同的时候是一个园
    CGContextStrokePath(ctx);
    }

效果:
这里写图片描述

5)

- (void)drawRect:(CGRect)rect {
     CGContextRef ctx = UIGraphicsGetCurrentContext();  //     上下文
//     绘制圆弧
//    /**
//     参数
//     1. 上下文
//     2. 起始点x
//     3. 起始点y
//     4. 半径
//     5. 起始弧度
//     6. 结束弧度
//     7. 是否顺时针,0: 顺时针,1:逆时针
//     */
    CGContextAddArc(ctx, 200, 200, 100, 0, M_PI, 0);
    CGContextStrokePath(ctx);
  }    

这里写图片描述

效果:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值