* Quartz2D简介

1.什么是Quartz2D?
他是一个二维的绘图引擎,同时支持iOS和Mac系统 2.Quartz2D能完成的工作
画基本线条,绘制文字,图片,截图,自定义UIView. 3.Quartz2D在开发中的价值
当我们的控件样式极其复杂时,可以把控件内部的结构给画出画,就是自定义控件. 5.什么是图形上下文,上下文的类型有哪些?
图形上下文是用来保存用户绘制的内容状态,并决定绘制到哪个地方的.
用户把绘制好的内容先保存到图形上下文,
然后根据选择的图形上下文的不同,绘制的内容显示到地方也不相同,即输出目标也不相同. 图形上下文的类型有:
Bitmap Graphics Context(位图上下文)
PDF Graphics Context
Window Graphics Context
Layer Graphics Context(图层上下文,自定义UIView取得上下文就是图层上下文.
UIView之所以能够显示就是因为他内部有一个图层)
Printer Graphics Context 6.如何自定义UIView,步骤是什么? 首先得要有上下文,有了上下文才能决定把绘制的东西显示到哪个地方去.
其次就是这个上下文必须得和View相关联.才能将内容绘制到View上面. 步骤:
1.要先自定定UIView
2.实现DrawRect方法
3.在DrawRect方法中取得跟View相关联的上下文.
4.绘制路径(描述路径长什么样).
5.把描述好的路径保存到上下文(即:添加路径到上下文)
6.把上下文的内容渲染到View * 基本线条绘制
1.DrawRect方法作用?什么时候调用.
DrawRect作用:专用在这个方法当中绘图的.只有在这个方法当中才能取得跟View相关联的上下文.
DrawRect是系统自己调用的, 它是当View显示的时候自动调用. 2.画线(基本步骤描述)
2.1获取跟View相关联的上下文
CGContextRef ctx = UIGraphicsGetCurrentContext(); 2.2绘制路径
UIBezierPath *path = [UIBezierPath bezierPath]; 2.2.1设置起点
[path moveToPoint:CGPointMake(10, 125)]; 2.2.2添加一根线到某个点
[path addLineToPoint:CGPointMake(200, 125)]; 2.3把路径添加到上下文
CGContextAddPath(ctx,path.CGPath); 2.4把上下文的内容渲染到View上面.
CGContextStrokePath(ctx); 3. 想要再添加一根线怎么办?
第一种方法:重新设置起点,添加一根线到某个点,一个UIBezierPath路径上面可以有多条线.
第二种方法:直接在原来的基础上添加线.把上一条的终点当做下一条线的起点.添加一根线到某个点
直接在下面addLineToPoint: 4.怎么样设置线的宽度,颜色,样式?
设置这些样式,我们称为是修改图形上下文的状态.
设置线宽:CGContextSetLineWidth(ctx, 20);
设置线段的连接样式: CGContextSetLineJoin(ctx, kCGLineJoinRound);
添加顶角样式:CGContextSetLineCap(ctx, kCGLineCapRound);
设置线的颜色: [[UIColor redColor] setStroke]; 5.如何画曲线? 画曲线方法比较特殊需要一个控制点来决定曲线的弯曲程度.画曲线方法为:
先设置一个曲线的起点
[path moveToPoint:CGPointMake(10, 125)];
再添加到个点到曲线的终点.同时还须要一个controlPoint(控件点决定曲线弯曲的方法程序)
[path addQuadCurveToPoint:CGPointMake(240, 125) controlPoint:CGPointMake(125, 10)]; 6.如何画矩形,圆角矩形? 画矩形直接利用UIBezierPath给我们封装好的路径方法
(x,y)点决定了矩形左上角的点在哪个位置
(width,height)是矩形的宽度高度
bezierPathWithOvalInRect:CGRectMake(x, y, width, height) 圆角矩形的画法多了一个参数,cornerRadius
cornerRadius它是矩形的圆角半径.
通过圆角矩形可以画一个圆.当矩形是正方形的时候,把圆角半径设为宽度的一半,就是一个圆.
bezierPathWithRoundedRect:CGRectMake(10, 100, 50, 50) cornerRadius:10 7.如果画椭圆,圆? 画椭圆的方法为:
前两个参数分别代码圆的圆心,后面两个参数分别代表圆的宽度,与高度.
宽高都相等时,画的是一个正圆, 不相等时画的是一个椭圆
bezierPathWithOvalInRect:CGRectMake(10, 100, 50, 50) 8.如何利用UIKit封装的上下文进行画图?
直接来个:[path stroke]就可以了.
它底层的实现,就是获取上下文,拼接路径,把路径添加到上下文,渲染到View 9.如何画圆弧? 首先要确定圆才能确定圆弧,圆孤它就圆上的一个角度嘛 Center:圆心
radius:圆的半径
startAngle:起始角度
endAngle:终点角度
clockwise:Yes顺时针,No逆时针 注意:startAngle角度的位置是从圆的最右侧为0度. UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(125, 125)
radius:100
startAngle:0
endAngle:M_PI * 2
clockwise:YES]; 10.如果画扇形.
画扇形的方法为:先画一个圆孤再添加一个一根线到圆心,然后关闭路径.
关闭路径就会自动从路径的终点到路径的起点封闭起下
用填充的话,它会默认做一个封闭路径,从路径的终点到起点.
[path fill];
 

Quartz2D简介及基本线条绘制的更多相关文章

  1. IOS Quartz2D简介

    Quartz2D 简介( 后续会有相关应用) 第一部分 绘制直线 代码示例: - (void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef cxConte ...

  2. Canvas:橡皮筋线条绘制

    Canvas:橡皮筋线条绘制 效果演示 实现要点 事件监听 [说明]: 在Canvas中检测鼠标事件是非常简单的,可以在canvas中添加一个事件监听器,当事件发生时,浏览器就会调用这个监听器. 我们 ...

  3. canvas(一) 基本线条绘制

    var dom = document.getElementById('canvasItem'), ctx = dom.getContext('2d'); //坐标位置默认基于 浏览器窗口(0,0),此 ...

  4. iOS:quartz2D绘图(给图形绘制阴影)

    quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在drawRect:方法中同时调用绘制同一个图形时,在对绘制的图形做 ...

  5. 基于canvas线条绘制图形

    原理说明 绘制一个正方形,正放心每条边等比例均分,具体分配多少根据自身情况而定,按照最上边边顺时针方向依次绘制线条,相邻两条边上的点依次连接,知道所有的点全部连接完便绘制完成. 示例效果图图如下 具体 ...

  6. iOS:quartz2D绘图(处理图像,绘制图像并添加水印)

    绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize siz ...

  7. Quartz2D简介

    Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作:

  8. Android开发——xml知识之xml可绘制对象简介

    引言:摘录Android用户界面设计 Android支持各类xml可绘制对象,其中一些可绘制对象可用于实现让一个资源使用多个图片文件,另外一些则允许你在xml中真正地指定颜色,还有一些你从来都不会用到 ...

  9. iOS:quartz2D绘图(在PDF文件上绘制图片)

    quartz2D还可以在PDF文件上绘制图片,它有自己的PDF Graphics Context上下文,通过UIGraphicsBeginPDFContextToFile方法开始上下文后就可以绘制图片 ...

随机推荐

  1. xp系统的安装SVN

    xp系统安装SVN,出现错误: 解决办法: 1,首先确定xp体统是否为sp3,SVN安装需要在sp3以上: 2,检查windows Installer是否开启,解决:控制面板-管理工具-服务—wind ...

  2. Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  3. [ROS]2 尝试编译OrbSLAM

    主要参考http://blog.csdn.net/dourenyin/article/details/48055441 1.编译g2o的过程中, 先是出现Eigen3依赖项的问题,要求Eigen3最低 ...

  4. python set add 导致问题 TypeError: unhashable type: 'list'

    问题复现 >>> a = set() >>> b = set() >>> b.add(1) >>> a.add(b) Trace ...

  5. MongoDB安装、管理工具、操作

    1. mongoDB安装.启动.关闭 1.1 下载安装包 wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.3.tgz 1.2 ...

  6. PAT 解题报告 1051. Pop Sequence (25)

    1051. Pop Sequence (25) Given a stack which can keep M numbers at most. Push N numbers in the order ...

  7. 《30天自制操作系统》08_day_学习笔记

    harib05a: 鼠标解读(01)P145 前一天已经让鼠标成功接收数据了,这些数据是什么意思? 笔者在这一部分来解读数据:让鼠标动起来啊,停在那不动有什么意思啊! 前面已经知道,鼠标每一次动作都是 ...

  8. C++Primer 第十七章

    //1.当我们希望将一些数据组合成单一对象,但又不想麻烦地定义一个新的数据结构来表示这些数据的时候,tuple非常有用.其和其伴随类型和函数都定义在头文件tuple中,声明在命名空间std中. tup ...

  9. PostgreSQL单机、同步复制、异步复制性能测试对比

    测试环境: •测试机:PC •内存:8GB •CPU:Intel(R) Core(TM) i5-3450 3.10GHz •硬盘:HDD •数据量:20GB •测试工具:pgbench •Postgr ...

  10. 使用opencv显示视频的方法

    下面对使用opencv显示视频做一个简单的记录.当然,网上这方面的资料已经数不胜数了,我只是将其简单记录,总结一下. 在opencv中显示视频主要有: (1)从本地读取视频和调用摄像头读取视频 (2) ...