iOS开发UI篇—Quartz2D使用(绘图路径)
生活随笔
收集整理的這篇文章主要介紹了
iOS开发UI篇—Quartz2D使用(绘图路径)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
iOS開發(fā)UI篇—Quartz2D使用(繪圖路徑)
一、繪圖路徑
A.簡單說明 在畫線的時(shí)候,方法的內(nèi)部默認(rèn)創(chuàng)建一個(gè)path。它把路徑都放到了path里面去。 1.創(chuàng)建路徑 ?cgmutablepathref 調(diào)用該方法相當(dāng)于創(chuàng)建了一個(gè)路徑,這個(gè)路徑用來保存繪圖信息。 2.把繪圖信息添加到路徑里邊。 以前的方法是點(diǎn)的位置添加到ctx(圖形上下文信息)中,ctx 默認(rèn)會在內(nèi)部創(chuàng)建一個(gè)path用來保存繪圖信息。 在圖形上下文中有一塊存儲空間專門用來存儲繪圖信息,其實(shí)這塊空間就是CGMutablePathRef。 3.把路徑添加到上下文中。 代碼示例: 繪制一條直線的代碼: //1.獲取圖形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//2.繪圖(畫線)//設(shè)置起點(diǎn)CGContextMoveToPoint(ctx, 20, 20);//設(shè)置終點(diǎn)CGContextAddLineToPoint(ctx, 200, 300);//渲染CGContextStrokePath(ctx);上面的代碼和下面的代碼是等價(jià)的。
//1.獲取圖形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//2.繪圖//2.1創(chuàng)建一條直線繪圖的路徑//注意:但凡通過Quartz2D中帶有creat/copy/retain方法創(chuàng)建出來的值都必須要釋放CGMutablePathRef path=CGPathCreateMutable();//2.2把繪圖信息添加到路徑里CGPathMoveToPoint(path, NULL, 20, 20);CGPathAddLineToPoint(path, NULL, 200, 300);//2.3把路徑添加到上下文中//把繪制直線的繪圖信息保存到圖形上下文中 CGContextAddPath(ctx, path);//3.渲染 CGContextStrokePath(ctx);//4.釋放前面創(chuàng)建的兩條路徑//第一種方法 CGPathRelease(path);//第二種方法// CFRelease(path); }?
B.直接使用path的好處: 第一種代碼的閱讀性不好,不便于區(qū)分。使用path,則一個(gè)path就代表一條路徑。 比如:如果要在上下文中繪制多個(gè)圖形,這種情況下建議使用path。 代碼示例: - (void)drawRect:(CGRect)rect {//1.獲取圖形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//2.繪圖//2.a 畫一條直線//2.a.1創(chuàng)建一條繪圖的路徑//注意:但凡通過Quartz2D中帶有creat/copy/retain方法創(chuàng)建出來的值都必須要釋放CGMutablePathRef path=CGPathCreateMutable();//2.a.2把繪圖信息添加到路徑里CGPathMoveToPoint(path, NULL, 20, 20);CGPathAddLineToPoint(path, NULL, 200, 300);//2.a.3把路徑添加到上下文中//把繪制直線的繪圖信息保存到圖形上下文中 CGContextAddPath(ctx, path);//2.b畫一個(gè)圓//2.b.1創(chuàng)建一條畫圓的繪圖路徑(注意這里是可變的,不是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.釋放前面創(chuàng)建的兩條路徑//第一種方法 CGPathRelease(path);CGPathRelease(path1);//第二種方法 // CFRelease(path); } 效果:?
提示:如果是畫線,那么就創(chuàng)建一條路徑(path)用來保存畫線的繪圖信息,如果又要重新畫一個(gè)圓,那么就可以創(chuàng)建一條新的路徑來專門保存畫圓的繪圖信息。 注意: 但凡通過quarzt2d中帶有creat/copy/retain方法創(chuàng)建出來的值都必須手動的釋放 有兩種方法可以釋放前面創(chuàng)建的路徑: (1)CGPathRelease(path); (2)CFRelease(path); 說明:CFRelease屬于更底層的cocafoundation框架 二、補(bǔ)充知識點(diǎn): 畫四邊形的一些方法: 第一種方式:通過連接固定的點(diǎn)繪制四邊形 第二種方式:指定起點(diǎn)和寬高繪制四邊形 第三種方式:把第二種方式中的兩步合并成一步。 第四種方式(oc的方法):繪制實(shí)心的四邊形,注意沒有空心的方法 第五種:畫根線,設(shè)置線條的寬度(通過這種方式可以畫斜的四邊形) 代碼示例: // // YYview.m // 06-四邊形的五種畫法 // // Created by apple on 14-6-11. // Copyright (c) 2014年 itcase. All rights reserved. // #import "YYview.h"@implementation YYview- (void)drawRect:(CGRect)rect {//獲取圖形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//第一種畫法,通過連接固定的點(diǎn)繪制四邊形 // CGContextMoveToPoint(ctx, 0, 20); // CGContextAddLineToPoint(<#CGContextRef c#>, <#CGFloat x#>, <#CGFloat y#>); // CGContextAddLineToPoint(<#CGContextRef c#>, <#CGFloat x#>, <#CGFloat y#>); // CGContextAddLineToPoint(<#CGContextRef c#>, <#CGFloat x#>, <#CGFloat y#>);//第二種方式:指定起點(diǎn)和寬高繪制四邊形 // CGContextAddRect(ctx, CGRectMake(20, 20, 200, 100)); // //渲染 // CGContextStrokePath(ctx);//第三種方式:二種的兩步合并成一步。//畫空心的四邊形 // CGContextStrokeRect(ctx, CGRectMake(20, 20, 200, 100)); // //畫實(shí)心的四邊形 // CGContextFillRect(ctx, CGRectMake(20, 20, 200, 100));//第四種方式(oc的方法):繪制實(shí)心的四邊形,注意沒有空心的方法UIRectFill(CGRectMake(20, 20, 200, 100));//第五種方式:畫根線,設(shè)置線條的寬度(通過這種方式可以畫斜的四邊形) // CGContextMoveToPoint(ctx, 20, 20); // CGContextAddLineToPoint(ctx, 100, 200); // CGContextSetLineWidth(ctx, 50); // //注意,線條只能畫成是空心的 // CGContextStrokePath(ctx); } @end第五種方法可以畫斜的四邊形。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yipingios/p/5557013.html
總結(jié)
以上是生活随笔為你收集整理的iOS开发UI篇—Quartz2D使用(绘图路径)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开博第一篇,聊聊 最基本的 “==” 与
- 下一篇: 静态链接与动态链接