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