IOS开发UI:Quartz2D的使用
来源:互联网 发布:程序员密码 编辑:程序博客网 时间:2024/05/21 19:48
<strong><span style="font-size:14px;"></span></strong>
<strong><span style="font-size:14px;"></span></strong>
<strong><span style="font-size:14px;"></span></strong>
<strong><span style="font-size:14px;">- (void)drawRect:(CGRect)rect{ //1.画文字 NSString* data = @"Quartz2D的使用"; // 调用Draw方法 [data drawInRect:CGRectMake(100, 0, 100, 100) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}]; //2.画图片 UIImage* image = [UIImage imageNamed:@"Volibear"]; // 利用drawInRect方法绘制图片到layer, 是通过拉伸原有图片 [image drawInRect:CGRectMake(100, 50, 100, 100)]; // 平铺模式显示按照片大小 [image drawAsPatternInRect:CGRectMake(0, 160, 320, 100)]; }</span></strong>
一、绘图路径
A.简单说明
在画线的时候,方法的内部默认创建一个path。它把路径都放到了path里面去。
1.创建路径 cgmutablepathref调用该方法相当于创建了一个路径,这个路径用来保存绘图信息。
2.把绘图信息添加到路径里边。
以前的方法是点的位置添加到ctx(图形上下文信息)中,ctx默认会在内部创建一个path用来保存绘图信息。
在图形上下文中有一块存储空间专门用来存储绘图信息,其实这块空间就是CGMutablePathRef。
3.把路径添加到上下文中。
代码示例:
绘制一条直线的代码:
<strong><span style="font-size:14px;"> /* // 方式 A // 获得上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 设置起点 CGContextMoveToPoint(ctx, 50, 50); // 设置线条 CGContextAddLineToPoint(ctx, 200, 200); // 线宽 CGContextSetLineWidth(ctx, 10); // 渲染 CGContextStrokePath(ctx); */ // 方式 B CGContextRef ctx = UIGraphicsGetCurrentContext(); // 创建可变路径 CGMutablePathRef path = CGPathCreateMutable(); // 绘制一个圆 CGPathAddEllipseInRect(path, nil, CGRectMake(100, 100, 100, 100)); // 将路径添加到上下文 CGContextAddPath(ctx, path); // 渲染 CGContextFillPath(ctx);</span></strong>
<strong><span style="font-size:14px;"><img src="http://img.blog.csdn.net/20160123175724654?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></strong>
<span style="font-size:14px;"></span><p class="p1" style="font-weight: bold;"><span class="s1"> </span><span class="s2">// </span><span class="s3">通过</span><span class="s2">Quartz2D</span><span class="s3">中带有</span><span class="s2">creat/copy/retain</span><span class="s3">方法创建出来的值都必须要释放</span></p><p class="p2"><span class="s1"> </span><span class="s2">CGPathRelease</span><span class="s1">(path);</span></p><p class="p2"><span class="s1"></span></p><p class="p1"><span class="s1"> B.</span><span class="s2">直接使用</span><span class="s1">path</span><span class="s2">的好处:</span></p><p class="p2"><span class="s3"> </span><span class="s1">第一种代码的阅读性不好,不便于区分。使用</span><span class="s3">path</span><span class="s1">,则一个</span><span class="s3">path</span><span class="s1">就代表一条路径。</span></p><p class="p2"><span class="s3"> </span><span class="s1">比如:如果要在上下文中绘制多个图形,这种情况下建议使用</span><span class="s3">path</span><span class="s1">。</span></p><p class="p1"><span class="s1"> </span><span class="s2">代码示例:</span></p><p class="p1"><span class="s2"></span><pre name="code" class="objc"> //1.获取图形上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); //2.绘图 //2.a 画一条直线 //2.a.1创建一条绘图的路径 //注意:但凡通过Quartz2D中带有creat/copy/retain方法创建出来的值都必须要释放 CGMutablePathRef path=CGPathCreateMutable(); //2.a.2把绘图信息添加到路径里 CGPathMoveToPoint(path, NULL, 20, 20); CGPathAddLineToPoint(path, NULL, 200, 300); //2.a.3把路径添加到上下文中 //把绘制直线的绘图信息保存到图形上下文中 CGContextAddPath(ctx, path); //2.b画一个圆 //2.b.1创建一条画圆的绘图路径(注意这里是可变的,不是CGPathRef) CGMutablePathRef path1=CGPathCreateMutable(); //2.b.2把圆的绘图信息添加到路径里 CGPathAddEllipseInRect(path1, NULL, CGRectMake(50, 50, 100, 100)); //2.b.3把圆的路径添加到图形上下文中 CGContextAddPath(ctx, path1); //3.渲染 CGContextStrokePath(ctx); //4.释放前面创建的两条路径 //第一种方法 CGPathRelease(path); CGPathRelease(path1); //第二种方法// CFRelease(path);
0 0
- IOS开发UI:Quartz2D的使用
- iOS开发UI篇—Quartz2D使用(图片剪切)
- iOS开发UI篇—Quartz2D使用(矩阵操作)
- iOS开发UI篇—Quartz2D简单使用(画文字)
- iOS开发UI篇—Quartz2D使用(绘图路径)
- iOS开发UI篇—Quartz2D使用(信纸条纹)
- iOS开发UI篇—Quartz2D使用(截屏)
- iOS开发UI高级—20Quartz2D简单使用(二)
- iOS开发UI高级—26Quartz2D使用(信纸条纹)
- iOS开发UI高级—27Quartz2D使用(截屏)
- iOS开发UI篇—Quartz2D使用(绘图路径
- iOS开发UI篇—Quartz2D简单使用(三)
- iOS开发UI篇-Quartz2D使用(绘图路径)
- iOS开发UI篇—Quartz2D简单使用(一)
- iOS开发UI篇—Quartz2D简单使用(二)
- iOS开发UI篇—Quartz2D使用(矩阵操作)
- iOS开发UI篇—Quartz2D使用(图片剪切)
- iOS开发UI篇—Quartz2D简单使用(三)
- PCI/PCIe 的那些事(2)- 配置空间(Configuration Space)
- 冒泡排序算法详解
- Android如何集成百度、高德、腾讯地图
- HDU 2037 今年暑假不AC(贪心)
- Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)
- IOS开发UI:Quartz2D的使用
- 使用Itext结合Jfreechart图表导出带图表的word文档
- Nandflash中的ECC原理及实现
- DP------Unique Paths
- 2、[置顶] CAS单点登录源码解析之【服务器端】
- UINavigationItem和UItabBarItem的区别详解
- Linux学习—xShell连接vmware虚拟机设置Ip
- Xcode 调试与快捷键
- hdu 3364(异或方程的高斯消元)