#Quartz 2D繪圖 ##Quartz 2D 概述git
##Graphics Contextgithub
'畫布' 「page」canvas
// 1. 將自定義視圖添加到視圖上顯示 - (void)viewDidLoad { [super viewDidLoad]; CoreGraphicsView *cgView = [[CoreGraphicsView alloc] initWithFrame:self.view.bounds]; cgView.backgroundColor = [UIColor blackColor]; [self.view addSubview:cgView]; // 2. 在自定義的DrawView 中繪圖,當視圖顯示時就會調用下面的代碼。 - (void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextAddRect(ctx, CGRectMake(10, 20, 100, 100)); CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor); CGContextDrawPath(ctx, kCGPathFill); } }
###Graphics Context 讀解c#
##Quartz 2D座標系框架
座標系統定義是被繪製到Page上的對象的位置及⼤小範圍,如圖所示。咱們在用戶空間座標系統(user-space coordination system,簡稱⽤戶空間)中指定圖形的位置及⼤小。座標值是⽤浮點數來定義的。函數
###UIKit座標系:字體
###座標系的轉換:spa
注意:
轉換座標系前,使用CGContextSaveGState(CGContextRef c)保存當前上下文狀態 座標系轉換後,使用CGContextRestoreGState(CGContextRef c)能夠恢復以前保存的上下⽂狀態 ##基本繪圖 ###Quartz 2D繪圖流程:code
繪製簡單圖形代碼對象
- (void)drawGraphics { CGContextRef cxt = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(cxt, [UIColor redColor].CGColor); CGContextSetLineWidth(cxt, 5); // 一、繪製矩形 CGContextAddRect(cxt, CGRectMake(20, 100, 320, 150)); CGContextDrawPath(cxt, kCGPathStroke); // 保存上下文狀態(入棧) CGContextSaveGState(cxt); // 二、繪製內切橢圓、圓 CGContextAddEllipseInRect(cxt, CGRectMake(20, 260, 320, 150)); CGContextSetStrokeColorWithColor(cxt, [UIColor orangeColor].CGColor); CGContextSetLineWidth(cxt, 10); CGContextDrawPath(cxt, kCGPathStroke); // 恢復上下文狀態(出棧) CGContextRestoreGState(cxt); // 三、繪製圓弧 CGContextMoveToPoint(cxt, 250, 500); CGContextAddArc(cxt, 200, 500, 50, 0, M_PI_2, NO); // 四、繪製貝塞爾曲線 // cpx、cpy: 控制點的座標, x、y目標點的座標 // CGContextAddQuadCurveToPoint(cxt, <#CGFloat cpx#>, <#CGFloat cpy#>, <#CGFloat x#>, <#CGFloat y#>) // CGContextAddCurveToPoint(<#CGContextRef _Nullable c#>, <#CGFloat cp1x#>, <#CGFloat cp1y#>, <#CGFloat cp2x#>, <#CGFloat cp2y#>, <#CGFloat x#>, <#CGFloat y#>) CGContextDrawPath(cxt, kCGPathStroke); }
###路徑:
- (void)drawText { CGRect rect = CGRectMake(20, 30, 200, 20); [text drawInRect:rect withAttributes:@{NSForegroundColorAttributeName : [UIColor redColor], NSBackgroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize:20]}]; }
###繪製圖形的基本屬性
- (void)drawLines { // 一、獲取當前繪圖上下文(繪圖環境)、能夠理解爲建立一塊畫布 CGContextRef cxt = UIGraphicsGetCurrentContext(); // 二、移動到某個點 CGContextMoveToPoint(cxt, 20, 100); // 三、添加一條直線到某個點 CGContextAddLineToPoint(cxt, 300, 100); CGContextAddLineToPoint(cxt, 160, 300); // 閉合路徑 CGContextClosePath(cxt); // 四、設置描邊和填充顏色 CGContextSetStrokeColorWithColor(cxt, [UIColor redColor].CGColor); //CGContextSetRGBStrokeColor(cxt, 200/255.0, 300/255.0, 10/255.0, 1); // CGContextSetCMYKStrokeColor(cxt, 0.1, 0.3, 0.5, 0.8, 1); CGContextSetFillColorWithColor(cxt, [UIColor whiteColor].CGColor); // 五、設置線條寬度 CGContextSetLineWidth(cxt, 5); // 六、設置線頭樣式 CGContextSetLineCap(cxt, kCGLineCapRound); // 七、設置線條鏈接點的樣式 CGContextSetLineJoin(cxt, kCGLineJoinRound); // 八、設置虛線 // CGFloat lengths[] = {2,10,2}; // CGContextSetLineDash(cxt, 0, lengths, 3); // 九、是否開啓抗鋸齒 CGContextSetShouldAntialias(cxt, YES); // 十、繪製描邊 // CGContextStrokePath(cxt); // 十一、繪製填充 // CGContextFillPath(cxt); // 十二、繪製描邊、填充、描邊和填充、奇偶填充:kCGPathFill,kCGPathEOFill,kCGPathStroke,kCGPathFillStroke, kCGPathEOFillStroke CGContextDrawPath(cxt, kCGPathFillStroke); }
###構建路徑的函數說明:
###繪製路徑的函數說明:
###繪圖狀態參數說明:
CGContextSetLineWidth// 線條寬度 CGContextSetBlendMode // 設置混合模式 CGContextSetShouldAntialias // 設置抗鋸齒效果 CGContextSetLineCap // 設置線條收尾點樣式 CGContextSetLineJoin // 設置線條鏈接點樣式 CGContextSetLineDash// 設置虛線
##繪圖實戰 Demo下載
簡單的繪圖