在view上绘制一个图形的方式有很多种,表现形式可能不一样,但其实质步骤都是一样的:

1)获取上下文

2)绘制路径

3)添加路径到上下文

4)修改图形状态参数

5)渲染上下文

下面我们以画一个圆形来演示其实现步骤:

1)使用CGContextRef创建路径

1
2
3
4
5
6
7
8
9
 //获取上下文
 CGContextRef ctx = UIGraphicsGetCurrentContext();
 //绘制路径: 圆形(中心坐标200、200、半径100、起点弧度0、终点弧度2PI、画的方向0逆1正)
 CGContextAddArc(ctx, 200, 200, 100, 0, M_PI * 2, 0);
 //修改图形状态参数
 CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.9, 1.0);//笔颜色
 CGContextSetLineWidth(ctx, 10);//线条宽度
 //渲染上下文
 CGContextStrokePath(ctx);

2)使用CGPathRef创建路径

1
2
3
4
5
6
7
8
9
10
11
12
13
 //获取上下文
 CGContextRef ctx = UIGraphicsGetCurrentContext();
 //创建可变路径
 CGMutablePathRef path = CGPathCreateMutable();
 //添加圆形到路径中(所在路径、不进行变换操作、中心坐标200、200、起点弧度0、终点弧度2PI、画的方向0逆1正)
 CGPathAddArc(path, NULL, 200, 200, 100, 0, M_PI * 2, 1);
 //将路径添加到上下文
 CGContextAddPath(ctx, path);
 //修改图形状态参数
 CGContextSetRGBStrokeColor(ctx, 0.5, 0.5, 0.9, 1.0);//笔颜色
 CGContextSetLineWidth(ctx, 10);//线条宽度
 //渲染上下文
 CGContextStrokePath(ctx);

3)使用UIBezierPath创建路径

1
2
3
4
5
6
7
 //创建路径
 UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 200, 200)];
 //修改图形状态参数
 [[UIColor colorWithRed:0.5 green:0.5 blue:0.9 alpha:1.0] setStroke];//笔颜色
 [path setLineWidth:10];//线条宽度
 //渲染
 [path stroke];

以上三种方式都可以实现绘制,通过比较我们可以发现使用UIBezierPath创建路径的形式是最简洁且最直观的,推荐使用UIBezierPath,在以后的动画中我们也将更多地应用UIBezierPath到动画的实现中。

最新文章

  1. PRINCE2随笔
  2. httpclient 调用WebAPI
  3. [leetcode]Find Minimum in Rotated Sorted Array II @ Python
  4. Java 集合深入理解(5):AbstractCollection
  5. 使用tortoisegit管理git 和 权限验证
  6. 利用纯java捕获和播放音频
  7. Lazy<T>延迟初始化
  8. C字符串输入输出函数
  9. oracle 处理时间和金额大小写的相关函数集合
  10. spring-mvc报红错误
  11. MySQL随笔(2)
  12. Jenkins技巧:如何启动、停止、重启、重载Jenkins
  13. 基于【字符】操作的IO接口:Writer、Reader
  14. Spring Cloud Consul使用——服务注册与发现(注册中心)
  15. python---自定义字段验证
  16. bzoj2654
  17. QT Graphics-View 3D编程例子- 3D Model Viewer
  18. ChIP-seq实战 | 染色质免疫共沉淀技术 | ATAC-seq | 染色质开放性测序技术
  19. 应用PLSQL Developer(技巧)
  20. linux操作系统基础讲解

热门文章

  1. scipy的一些函数名
  2. Failed to execute goal org.springframework.boot
  3. 原生js作用域(红宝书)
  4. Oracle 通过触发器实现ID自增
  5. CentOS下使用VirtualBox 安装 Windows虚拟机的简单方法
  6. Jenkins 登录提示 登录无效 的解决办法
  7. [自学]Docker system 命令 查看docker镜像磁盘占用情况 Docker volume 相关
  8. bat脚本的写法
  9. 借鉴 学习 DELPHI 通用函数 哈哈
  10. 【Java】 异常