一、关于矩阵操作

1.画一个四边形

通过设置两个端点(长和宽)来完成一个四边形的绘制。

代码:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3 //画四边形
 4 //获取图形上下文  5 CGContextRef ctx=UIGraphicsGetCurrentContext();
 6 //绘图  7 CGContextAddRect(ctx, CGRectMake(20, 50, 100, 100));
 8 //渲染  9  CGContextStrokePath(ctx);
10 }

说明:通过这种方式画矩形有弱点:画出来的矩形永远都是正的。如下图:

2.画一个歪的四边形

如何画一个歪的矩形?(通过矩阵操作来完成,和形变操作相似)

可以通过矩阵操作,把画出来的东西进行形变(旋转,缩放,平移)

方法:CGContextRotateCTM(<#CGContextRef c#>, <#CGFloat angle#>)该接受两个参数(图形上下文,弧度)

注意点:设置矩阵操作必须要在添加图形之前,如果设置在添加图形之后的话,此时它已经画完了,无效。

代码:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3 //画四边形
 4 //获取图形上下文  5 CGContextRef ctx=UIGraphicsGetCurrentContext();
 6 //矩阵操作
 7 //注意点:设置矩阵操作必须要在添加绘图信息之前
 8 //旋转45度  9  CGContextRotateCTM(ctx, M_PI_4);
10 11 //绘图 12 CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13 //渲染 14  CGContextStrokePath(ctx);
15 }

  效果:

二、关于旋转

1.旋转演示

view之所以能够显示视图,是因为它的上面有layer,将来图形也是渲染到layer上面。

且,旋转的时候是整个layer都旋转了,可以再画一个圆进行验证。

代码1(未旋转):

 1 - (void)drawRect:(CGRect)rect
 2 {
 3 //获取图形上下文  4 CGContextRef ctx=UIGraphicsGetCurrentContext();
 5 //矩阵操作
 6 //注意点:设置矩阵操作必须要在添加绘图信息之前
 7 //旋转45度
 8 // CGContextRotateCTM(ctx, M_PI_4);
 9 10 //绘图
11 //画四边形 12 CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13 //画一个圆 14 CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15 //渲染 16  CGContextStrokePath(ctx);
17 }

效果:

代码2(旋转):

 1 - (void)drawRect:(CGRect)rect
 2 {
 3 //获取图形上下文  4 CGContextRef ctx=UIGraphicsGetCurrentContext();
 5 //矩阵操作
 6 //注意点:设置矩阵操作必须要在添加绘图信息之前
 7 //旋转45度  8  CGContextRotateCTM(ctx, M_PI_4);
 9 10 //绘图
11 //画四边形 12 CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13 //画一个圆 14 CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15 //渲染 16  CGContextStrokePath(ctx);
17 }

效果:

2.关于旋转的补充说明

提示:旋转的时候,是整个layer都旋转了。

三、缩放

方法:CGContextScaleCTM(<#CGContextRef c#>, <#CGFloat sx#>, <#CGFloat sy#>)

该方法接收三个参数(图形上下文,x方向的缩放比例,y方向上的缩放比例

代码示例:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3 //获取图形上下文  4 CGContextRef ctx=UIGraphicsGetCurrentContext();
 5 //矩阵操作
 6 //注意点:设置矩阵操作必须要在添加绘图信息之前
 7 //缩放,x方向缩放0.5倍,y方向缩放1.5倍  8 CGContextScaleCTM(ctx, 0.5, 1.5);
 9 10 //绘图
11 //画四边形 12 CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13 //画一个圆 14 CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15 //渲染 16  CGContextStrokePath(ctx);
17 }

效果:

四、平移

方法: CGContextTranslateCTM(<#CGContextRef c#>, <#CGFloat tx#>, <#CGFloat ty#>)

该方法接收三个参数(图形上下文,x方向的偏移量,y方向上的偏移量)

代码示例:

 1 - (void)drawRect:(CGRect)rect
 2 {
 3 //获取图形上下文  4 CGContextRef ctx=UIGraphicsGetCurrentContext();
 5 //矩阵操作
 6 //注意点:设置矩阵操作必须要在添加绘图信息之前
 7 //平移,x方向移动50,y方向移动100  8 CGContextTranslateCTM(ctx, 50, 100);
 9 10 //绘图
11 //画四边形 12 CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
13 //画一个圆 14 CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
15 //渲染 16  CGContextStrokePath(ctx);
17 }

效果:

提示:坐标原点为view的左上角。

iOS开发UI篇—Quartz2D使用(矩阵操作)相关推荐

  1. iOS开发UI篇—Quartz2D使用(绘图路径)

    iOS开发UI篇-Quartz2D使用(绘图路径) 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepat ...

  2. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇-Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  3. iOS开发UI篇—Quartz2D使用(信纸条纹)

    iOS开发UI篇-Quartz2D使用(信纸条纹) 一.前导程序 新建一个项目,在主控制器文件中实现以下几行代码,就能轻松的完成图片在视图中的平铺. 1 #import "YYViewCon ...

  4. iOS开发UI篇—Quartz2D使用(绘制基本图形)

    一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 决定绘制的输出目标(绘制到什么地方去?)(输出目标可以 ...

  5. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  6. iOS开发UI篇—实现UITableview控件数据刷新

    iOS开发UI篇-实现UITableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...

  7. iOS开发UI篇—CALayer简介

    iOS开发UI篇-CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UI ...

  8. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇-UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) 1 #import <Foundation/Foundation.h&g ...

  9. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇-使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 iOS开发UI篇-使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目 ...

最新文章

  1. C和C++安全编码笔记:格式化输出
  2. QIIME 2教程. 26为QIIME 2开发新插件DevelopingPlugin(2020.11)
  3. android 9.0室内定位方案,Android GPS室内定位问题的解决方法(location为null)
  4. Mysql SQL查询今天、昨天、n天内、第n天(执行效率不高)
  5. java之通过FileChannel实现文件复制
  6. 为什么要使用信道复用技术?常用的信道复用技术有哪些?
  7. Kubernetes-命名空间namespace(ns)(十四)
  8. 这可不是一般的便宜哦!
  9. 设计师交流社区,让你的原创设计作品展示给世界
  10. 离线电脑搭建开发环境
  11. Machine Learning - XVII. Large Scale Machine Learning大规模机器学习 (Week 10)
  12. php resize函数,Php Image Resize图片大小调整的函数代码
  13. SPSS多重响应分析(多选题)【SPSS 016期】
  14. 经济基础知识(中级)【6】
  15. js打印时分页,每页都有表头和表尾
  16. 文本分类上分利器: Bert微调trick大全
  17. Android开发-自定义View-AndroidStudio(二)遇到问题,附:ScrollView中文API
  18. 高通QCM6125的LK部分(uefi/xbl)编译
  19. 北京烤鸭+腊肉炒花菜+香椿炒蛋
  20. 我的世界rpg服务器无限点卷无限金币地址,我的世界RPG插件无限刷任何物品 | 手游网游页游攻略大全...

热门文章

  1. 计算机专业跨考学科英语难吗,跨考学科英语,过来人走过的弯路
  2. web 端 gantt组件选型
  3. excel如何做出弧形_人民日报同款海报,只用线和字就能做出高大上的工作报告...
  4. 网页编辑PHP变量,编辑文件中的php代码和变量
  5. centos7.2编译php,CentOS7.2编译安装PHP7.2.3之史上最详细步骤。
  6. 计算机三级之嵌入式系统学习笔记4
  7. RabbitMQ服务的安装与使用
  8. Python中的lambda表达式与filter函数
  9. IDEA隐藏不需要的文件
  10. vue 调用webservice_调用webService的几种方式