你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發系列--繪圖與濾鏡全面解析

iOS開發系列--繪圖與濾鏡全面解析

編輯:IOS開發綜合
Quartz 2D 在iOS中常用的繪圖框架就是Quartz 2D,Quartz 2D是Core Graphics框架的一部分,是一個強大的二維圖像繪制引擎。Quartz 2D在UIKit中也有很好的封裝和集成,我們日常開發時所用到的UIKit中的組件都是由Core Graphics進行繪制的。不僅如此,當我們引入UIKit框架時系統會自動引入Core Graphics框架,並且為了方便開發者使用在UIKit內部還對一些常用的繪圖API進行了封裝。   在iOS中繪圖一般分為以下幾個步驟:   1.獲取繪圖上下文   2.創建並設置路徑   3.將路徑添加到上下文   4.設置上下文狀態   5.繪制路徑   6.釋放路徑   圖形上下文CGContextRef代表圖形輸出設備(也就是繪制的位置),包含了繪制圖形的一些設備信息,Quartz 2D中的所有對象最終都必須繪制到圖形上下文。這樣一來,我們在繪制圖形時就不必關心具體的設備信息,統一了代碼編寫方式(在Quartz 2D中的繪圖上下文可以是位圖Bitmap、PDF、窗口Window、層Layer、打印對象Printer)。   基本圖形繪制 在UIKit中默認已經為我們准備好了一個圖形上下文對象,在UI控件的drawRect:方法(這個方法在loadView、viewDidLoad方法後執行)中我們可以通過UIKit封裝函數UIGraphicsGetCurrentContext()方法獲得這個圖形上下文(注意在其他UI控件方法中無法取得這個對象),然後我們只要按照繪圖步驟一步步執行即可。下面自定義一個KCView繼承自UIView,重寫drawRect:方法繪制兩條直線說明上面繪圖的步驟:   KCView.m   // //  KCView.m //  Quartz2D // //  Created by Kenshin Cui on 14-3-17. //  Copyright (c) 2014年 Kenshin Cui. All rights reserved. // /**  基本繪圖  */   #import "KCView.h"   @implementation KCView   #pragma mark 繪圖 //繪圖只能在此方法中調用,否則無法得到當前圖形上下文 -(void)drawRect:(CGRect)rect{     //1.取得圖形上下文對象     CGContextRef context = UIGraphicsGetCurrentContext();       //2.創建路徑對象     CGMutablePathRef path = CGPathCreateMutable();     CGPathMoveToPoint(path, nil, 20, 50);//移動到指定位置(設置路徑起點)     CGPathAddLineToPoint(path, nil, 20, 100);//繪制直線(從起始位置開始)     CGPathAddLineToPoint(path, nil, 300, 100);//繪制另外一條直線(從上一直線終點開始繪制)         //3.添加路徑到圖形上下文     CGContextAddPath(context, path);       //4.設置圖形上下文狀態屬性     CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1);//設置筆觸顏色     CGContextSetRGBFillColor(context, 0, 1.0, 0, 1);//設置填充色     CGContextSetLineWidth(context, 2.0);//設置線條寬度     CGContextSetLineCap(context, kCGLineCapRound);//設置頂點樣式,(20,50)和(300,100)是頂點     CGContextSetLineJoin(context, kCGLineJoinRound);//設置連接點樣式,(20,100)是連接點     /*設置線段樣式     phase:虛線開始的位置     lengths:虛線長度間隔(例如下面的定義說明第一條線段長度8,然後間隔3重新繪制8點的長度線段,當然這個數組可以定義更多元素)     count:虛線數組元素個數     */     CGFloat lengths[2] = { 18, 9 };     CGContextSetLineDash(context, 0, lengths, 2);     /*設置陰影     context:圖形上下文     offset:偏移量     blur:模糊度     color:陰影顏色     */     CGColorRef color = [UIColor grayColor].CGColor;//顏色轉化,由於Quartz 2D跨平台,所以其中不能使用UIKit中的對象,但是UIkit提供了轉化方法     CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 0.8, color);       //5.繪制圖像到指定圖形上下文     /*CGPathDrawingMode是填充方式,枚舉類型     kCGPathFill:只有填充(非零纏繞數填充),不繪制邊框     kCGPathEOFill:奇偶規則填充(多條路徑交叉時,奇數交叉填充,偶交叉不填充)     kCGPathStroke:只有邊框     kCGPathFillStroke:既有邊框又有填充     kCGPathEOFillStroke:奇偶填充並繪制邊框     */     CGContextDrawPath(context, kCGPathFillStroke);//最後一個參數是填充類型       //6.釋放對象     CGPathRelease(path); } @end 在視圖控制器創建KCView並添加到根視圖中:   - (void)viewDidLoad {     [super viewDidLoad];          KCView *view=[[KCView alloc]initWithFrame:[UIScreen mainScreen].bounds];     view.backgroundColor=[UIColor whiteColor];     [self.view addSubview:view]; }
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved