iOS学习项目(21-Quartz 2D ①)
来源:互联网 发布:淘宝店铺旺旺号怎么看 编辑:程序博客网 时间:2024/05/16 06:54
①Quartz 2D
概念:二维绘图引擎,同时支持iOS和Mac系统
最大价值:自定义控件
②图形上下文(CGContextRef)
作用:保存绘图信息、状态;决定绘制的输出目标(绘制到什么地方去)
③利用Quartz 2D的绘制过程
④自定义控件的步骤:
1、新建一个类,继承自UIView
2、实现drawRect:
方法
在该方法中需要做的事:
a 取得跟当前view相关联的图形上下
b 绘制相应图形内容
c 利用图形上下文将绘制的内容显示(渲染)到view上面
⑤文本(NSString)和图片(UIImage)都有draw方法,可直接绘制到view上,从而不必获取上下。
/** 该方法绘制的文本不换行*/[string drawAtPoint:withAttributes:];/** 该方法绘制的文本在规定的范围内换行*/[string drawInRect:withAttributes:];
/** 该方法绘制的图片会拉伸到整个规定的范围*/[image drawInRect:];/** 该方法绘制的图片会平铺到整个规定的范围。(有点类似html中的图片平铺效果)*/[image drawAsPatterInRect:];
①绘图在iOS中是一个C语言的绘图框架(CoreGraphics.framework)
②项目类添加前缀方式:
工程—>PROJECT/TARGETS—>Class Prefix(右边)
③UIGraphicsGetCurrentContext 获得的上下文是图层上下文(Layer Graphics Context)
④图形上下文栈
作用:将图形上下文的状态(eg.颜色、线宽等)保存在栈中
CGContextSaveGState() 保存当前上下文状态到栈中(进栈)
CGContextRestoreGState() 恢复当前上下文状态 (出栈)
⑤利用Quartz2D对矩形进行操作
CGContextTranslateCTM 平移
CGContextScaleCTM 拉伸[按倍数进行计算]
CGContextRotateCTM 围绕原点(0,0)旋转[负逆正顺]
⑥利用Quartz2D进行图片的剪接步骤:
1 获取上下文
2 指定剪切路径,见多余的剪切掉,关键点CGContextClip
CGRect imageRect = CGRectMake(0, 0, rect.size.width, rect.size.height); CGContextAddEllipseInRect(ctx, imageRect); CGContextClip(ctx);
3 将图片显示到UIView上
⑦NSTimer与CADisplaylink定时器
CADisplayLink多用于UI的刷新(1/60秒刷新一次)
CADisplayLink要添加到主运行循环中才能使用
[link addToRunLoop:forMode:];
参数1:主程序[NSRunLoop mainRunLoop]
参数2:用默认的NSDefaultRunLoopMode
【注意:由于这个该定时器是添加(add)到主运行循环上的,因此最终需要将其移除,使其不占用资源(使用remove或者invalidate)】
⑧drawRect:会在view显示到屏幕的时候调用一次
⑨awakeFrom 该方法会在xib加载完成之后调用,可以在这其中对xib中的view属性进行修改
10.直接进行矩形的绘画
UIRectFill(实心)/UIRectFrame(空心)
利用上述两个方法可以直接将图形滑到UIView上
【但实际的本质是此方法自动关联上下文,并将图形画到UIView上】
11.目前绘制的方式
方式一:获取上下文之后,直接关联上下文进行绘制
方式二:先把所有的路径定义好,然后一次性往上下文中添加。
关于路径的运用步骤:
// 创建路径
CGMutablePathRef = CGPathCreateMutable();
// 设置路径(圆、矩形、弧、线等)
CGPathAdd…
// 把路径添加到上下文中
CGContextAddPath();
12 ARC不会释放C语言创建的资源。
以下有两个问题:
a.什么情况下创建的C语言资源需要释放?
以create、retain、copy创建的数据需要释放。
eg.CGPathCreateMutable
b.C语言资源释放的方式
指定资源的释放方式:eg.CGPathRelease(path)
通用的释放方式:CFRelease()
13 生成水印
步骤:
a 创建一个位图,开启位图上下文
UIGraphicsBeginImageContextWithOptions(<#CGSize size#>, <#BOOL opaque#>, <#CGFloat scale#>)参数1:图案大小参数2:是否为透明参数3:与屏幕分辨率的比例,0.0表示跟屏幕分辨率一致。【相关示例[UIScreen mainScreen].scale】
【注意:开启位图上下文之后UIImage再使用drawInRect将不会显示在view上,此时是会绘制在位图环境中。】
b 画背景 [baseImage drawRect:rect];
c 画水印
[waterBaseImage drawInRect:CGRectMake(0, 0, 100, 100)];
d 从位图上下文中获得当前的编辑图片
UIImage * newImage = UIGraphicGetImageFromCurrentImageContext();
e 结束当年的位图编辑
UIGraphicEndImageContext();
f 显示到UIIimageView上
[newImage drawInRect:CGRectMake(0, 0, 100, 100)];
- iOS学习项目(21-Quartz 2D ①)
- iOS学习项目(21-Quartz 2D ②)
- iOS Quartz 2D 学习总结
- IOS Quartz 2D
- iOS-Quartz 2D
- IOS Quartz 2D
- ios-Quartz 2D
- Quartz - 2D学习
- Quartz 2D 学习
- iOS学习阶段总结-b20120920-Quartz 2D绘图
- iOS 绘图 Quartz 2D
- ios--------------Quartz 2D 绘图
- iOS中的Quartz 2D
- iOS Quartz 2D介绍
- 【IOS 开发学习总结-OC-64】Quartz 2D绘图(4-1)——Quartz 2D绘图基础+点线模式
- Quartz 2D学习笔记
- Quartz 2D 学习总结
- Quartz 2D学习笔记
- poj 2349最小生成树变形+连通分支
- java基础题目总结
- 1005. 继续(3n+1)猜想 (25)
- android(java)常见异常信息
- CodeWars练习之反转数组
- iOS学习项目(21-Quartz 2D ①)
- android--ContentProvider的使用
- 模仿淘宝商城的订单分店铺的列表显示
- java中关键字volatile的作用
- Android:windowIsTranslucent透明 导致activity退出动画无效
- HttpClient中文乱码
- json的查询
- SSH配置笔记
- 130.Which two statements are true regarding listeners? (Choose two.)