版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、iOS 開發(fā) Quartz 2D+ UIBezierPath繪圖大全詳解Quartz 2D 使用大全結構圖UIKIt UIBezierPath Core Graphics OpenGL ES Quartz2D的區(qū)別和聯(lián)系UIKIt:UIKit中的控件都是基于Core Graphics實現(xiàn)的UIBezierPath:UIBezierPath屬于UIKit,它是蘋果對復雜的Core Graphics進行的封裝,方便我們用OC語言進行簡單的繪圖Core Graphics:是一套基于C語言的API,支持向量圖形,線、形狀、圖案、路徑、剃度、位圖圖像和pdf 內容的繪制。OpenGL ES:OpenGL
2、是由SGI公司開發(fā)的一套3D圖形軟件接口標準,它只是一個標準,具體實現(xiàn)由機械制造商來完成,所以不同的機器他的效果可能是完全不一樣的。OpenGL-ES版本,主要是應對嵌入式環(huán)境和應用的要求,應該說在高效完成2D/3D界面的同時,達到了降低功耗的效果。Quartz2D:quartz是一個通用的術語,用于描述在IOS整個媒體層用到的多種技術 包括圖形、動畫、音頻、適配。Quart 2D 是一組二位繪圖和渲染API,Core Graphic會使用到這組APICore Graphics框架繪圖我們要用到Core Graphics框架,Core Graphics Framework是一套基于C的API框
3、架,使用了Quartz作為繪圖引擎。該框架可以用于基于路徑的繪圖、變換、顏色管理、脫屏渲染,模板、漸變、遮蔽、圖像數(shù)據(jù)管理、圖像的創(chuàng)建、遮罩以及PDF文檔的創(chuàng)建、顯示和分析。Core Graphics API所有的操作都在一個上下文中進行。所以在繪圖之前需要獲取該上下文并傳入執(zhí)行渲染的函數(shù)中。介紹兩種最為常用的獲取方法。第一種方法就是創(chuàng)建一個圖片類型的上下文。調用UIGraphicsBeginImageContextWithOptions函數(shù)就可獲得用來處理圖片的圖形上下文。利用該上下文,你就可以在其上進行繪圖,并生成圖片。調用UIGraphicsGetImageFromCurrentImag
4、eContext函數(shù)可從當前上下文中獲取一個UIImage對象。記住在你所有的繪圖操作后別忘了調用UIGraphicsEndImageContext函數(shù)關閉圖形上下文。第二種方法是利用cocoa為你生成的圖形上下文。當你子類化了一個UIView并實現(xiàn)了自己的drawRect:方法后,一旦drawRect:方法被調用,Cocoa就會為你創(chuàng)建一個圖形上下文,此時你對圖形上下文的所有繪圖操作都會顯示在UIView上。什么是Quartz2D繪圖引擎 Quartz 2D是個二維繪圖引擎,iOS中部分控件的內容都是通過Quartz 2D畫出來的。 Quartz 2D是純C語言的 Quartz 2D的API
5、來自于CoreGraphics框架 數(shù)據(jù)類型和函數(shù)基本都是CG作為前綴o CGContextRefo CGPathRefo CGContextStrokePath(ctx)Quartz 2D能完成的工作 繪制圖形 : 線條三角形矩形圓弧形 繪制文字 繪制生成圖片(圖像) 讀取生成PDF 截圖裁剪圖片 自定義UI控件Quartz2D繪圖有以下兩種方式注意: UIBezierPath 對象可以獨立使用, 無需手動獲取“圖形上下文”對象,此處為了更好的理解“圖形上下文對象”所以暫時還是采用手動獲取“圖形上下文”對象的方式來繪圖。drawRect:方法的使用 View內部有個layer(圖層)屬性,d
6、rawRect:方法中取得的是一個Layer Graphics Context,因此,繪制的東西其實是繪制到view的layer上去了 iOS的繪圖操作是在UIView類的drawRect方法中完成的,重寫drawRect方法,在這里進行繪圖操作,程序會自動調用此方法進行繪圖。 重繪操作仍然在drawRect方法中完成,蘋果要求我們調用UIView類中的setNeedsDisplay方法,則程序會自動調用drawRect方法進行重繪。(調用setNeedsDisplay會自動調用drawRect)。 在UIView中,重寫drawRect: (CGRect) aRect方法,可以自己定義想要畫
7、的圖案.且此方法一般情況下只會畫一次.也就是說這個drawRect方法一般情況下只會被掉用一次. 當某些情況下想要手動重畫這個View,只需要掉用self setNeedsDisplay方法即可. rect指的就是當前view的bounds,即當前視圖的所有范圍。 drawRect:方法是系統(tǒng)幫我們調用的,不能手動去調用這個方法。原因是手動去調用drawRect方法的時候無法保證系統(tǒng)已經(jīng)幫我們創(chuàng)建好了”圖形上下文”,所以這樣就無法保證在drawRect:方法中獲取”圖形上下文”對象,也就無法進行繪圖了。 當這個view第一次顯示的時候會調用一次drawRect方法;當這個view執(zhí)行重繪操作的
8、時候會重新調用drawRect方法;通過調用self setNeedsDisplay 【重繪整個view】或self setNeedsDisplayInRect:【重繪指定區(qū)域】的方式讓view執(zhí)行drawRect方法進行重繪。圖形上下文CGContextRef圖形上下文的本質:是一個Quartz2D的繪圖環(huán)境!幾種不同的渲染方式通過C語言的API繪制基本圖形#pragma mark - 通過C語言的API繪制基本圖形- (void)drawRect:(CGRect)rect / 1.獲取上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext
9、(); / 2.設置起點 CGContextMoveToPoint(cxtRef, 50, 50); / 3.添加線 CGContextAddLineToPoint(cxtRef, 150, 150); / 3.2 繼續(xù)加線段 CGContextAddLineToPoint(cxtRef, 250, 50); / 3.3 向下的線 / 注意:如果想要新開線,需要重新設置起點! CGContextMoveToPoint(cxtRef, 150, 150); CGContextAddLineToPoint(cxtRef, 150, 250); / 4.渲染/ kCGPathFill 將線段包含的部
10、分渲染成黑色!/ kCGPathStroke 只負責繪制線條! CGContextDrawPath(cxtRef, kCGPathStroke);UIBezierPath進行直線圖形繪制#pragma mark - 通過UIBezierPath進行圖形繪制/ 不用寫關于圖形上下文的代碼,已經(jīng)封裝了,但是本質,還是需要獲取到view相關的圖形上下文,進行繪制!- (void)drawRect:(CGRect)rect / 1.獲取圖形上下文/ CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.創(chuàng)建路徑 UIBezierPath *p
11、ath = UIBezierPath bezierPath; / 3.1 設置起點 path moveToPoint:CGPointMake(50, 50); / 3.2 添加線 path addLineToPoint:CGPointMake(150, 150); path addLineToPoint:CGPointMake(250, 50); / 4.渲染-不寫圖形上下文的代碼時,直接使用此方法渲染繪制 path stroke; / 4.將路徑對象添加到圖形上下文/ CGContextAddPath(cxtRef, path.CGPath); / 5.渲染/ CGContextDrawPa
12、th(cxtRef, kCGPathStroke);UIBezierPath繪制矩形/ MARK: - 1.矩形- (void)drawRect:(CGRect)rect / 1.獲取圖形上下文/ CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.創(chuàng)建矩形的路徑 UIBezierPath *path = UIBezierPath bezierPathWithRect:CGRectMake(50, 50, 200, 80); / 3.渲染 path stroke; / 3.添加路徑到圖形上下文/ CGContextAddPath(c
13、xtRef, path.CGPath); / 4.渲染/ CGContextDrawPath(cxtRef, kCGPathStroke);UIBezierPath繪制圓角矩形/ MARK: - 2.圓角矩形- (void)drawRect:(CGRect)rect / / 1.獲取圖形上下文/ CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.創(chuàng)建路徑 CGFloat radius = 20; UIBezierPath *path = UIBezierPath bezierPathWithRoundedRect:CGRectMa
14、ke(50, 50, 200, 80) cornerRadius:radius; / 3.渲染 path stroke;/ / 3.添加路徑/ CGContextAddPath(cxtRef, path.CGPath);/ / 4.渲染/ CGContextDrawPath(cxtRef, kCGPathStroke);UIBezierPath繪制橢圓/ / 1.獲取圖形上下文/ CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.創(chuàng)建橢圓的路徑 UIBezierPath *path = UIBezierPath bezierPat
15、hWithOvalInRect:CGRectMake(50, 50, 200, 80); / 3.渲染 path stroke;/ / 3.添加/ CGContextAddPath(cxtRef, path.CGPath);/ / 4.渲染/ CGContextDrawPath(cxtRef, kCGPathStroke);UIBezierPath繪制弧形- (void)drawRect:(CGRect)rect / MARK: - 4.弧形/ / 1.獲取上下文/ CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.圓弧路徑 /*
16、 center 圓心 radius 半徑 startAngle 起始角度 endAngle 結束角度 clockwise 是否為順時針! */ / 圓心 CGPoint center = CGPointMake(150, 150); / 半徑 CGFloat radius = 100; / 起始角度 CGFloat startA = 0; / 結束角度 CGFloat endA = M_PI_2; / 是否為順時針 BOOL clockwise = NO; UIBezierPath *path = UIBezierPath bezierPathWithArcCenter:center radi
17、us:radius startAngle:startA endAngle:endA clockwise:clockwise; / 3.渲染 path stroke;/ / 3.添加路徑/ CGContextAddPath(cxtRef, path.CGPath);/ / 4.渲染/ CGContextDrawPath(cxtRef, kCGPathStroke);UIBezierPath繪制圓形 / 2.圓路徑 /* center 圓心 radius 半徑 startAngle 起始角度 endAngle 結束角度 clockwise 是否為順時針! */ / 圓心 CGPoint cente
18、r = CGPointMake(150, 150); / 半徑 CGFloat radius = 100; / 起始角度 CGFloat startA = 0; / 結束角度 CGFloat endA = M_PI * 2; / 是否為順時針 BOOL clockwise = NO; UIBezierPath *path = UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:clockwise; / 渲染 path stroke;UIBezier
19、Path繪制扇形 / 2.圓弧路徑 /* center 圓心 radius 半徑 startAngle 起始角度 endAngle 結束角度 clockwise 是否為順時針! */ / 圓心 CGPoint center = CGPointMake(150, 150); / 半徑 CGFloat radius = 100; / 起始角度 CGFloat startA = 0; / 結束角度 CGFloat endA = M_PI_4; / 是否為順時針 BOOL clockwise = YES; UIBezierPath *path = UIBezierPath bezierPathWith
20、ArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:clockwise; / 2.2 向圓心添加線 path addLineToPoint:center; / 渲染 path fill;繪圖狀態(tài)信息設置1 設置線寬 CGContextSetLineWidth2 設置線頭樣式 CGContextSetLineCap3 設置線段接頭樣式 CGContextSetLineJoin4 顏色的設置 UIColor redColor set- (void)drawRect:(CGRect)rect / / 1.獲
21、取圖形上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.創(chuàng)建矩形的路徑 UIBezierPath *path = UIBezierPath bezierPath; path moveToPoint:CGPointMake(50, 50); / 第一根線 path addLineToPoint:CGPointMake(150, 150); / 第二根線 path addLineToPoint:CGPointMake(250, 50); / 3.添加路徑到圖形上下文 CGContextAddPath(cxtRef, path.
22、CGPath); / 3.1 設置線寬! CGContextSetLineWidth(cxtRef, 20); / 3.2 設置線頭樣式 /* kCGLineCapButt, 比較難看的! kCGLineCapRound, 圓角 kCGLineCapSquare 平角 */ CGContextSetLineCap(cxtRef, kCGLineCapButt); / 3.3 設置接頭的樣式 /* kCGLineJoinMiter, 尖頭 kCGLineJoinRound, 圓角 kCGLineJoinBevel 多余的部分感覺被切了! */ CGContextSetLineJoin(cxtRe
23、f, kCGLineJoinMiter); / 3.4 顏色的設置 UIColor redColor setStroke; UIColor yellowColor setFill; / 4.渲染 CGContextDrawPath(cxtRef, kCGPathFillStroke);兩種填充原則- (void)drawRect:(CGRect)rect #pragma mark - 非零繞數(shù)填充規(guī)則 self nonzeroWindingNumberRule;#pragma mark - 奇偶填充規(guī)則 self evenOddRule;#pragma mark - 非零繞數(shù)填充規(guī)則 /* *
24、 非零繞數(shù)填充規(guī)則: * 在圖形上下文中的任何一個點 * 被順時針覆蓋標記為 1 * 被逆時針覆蓋標記為 -1 * 當標記為0的時候不填充,其他則填充 * 這個規(guī)則與方向有關,與次數(shù)無關 */- (void)nonzeroWindingNumberRule / 1.獲取圖形上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.繪制順時針的圓形 UIBezierPath *arcY = UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:100 st
25、artAngle:0 endAngle:M_PI * 2 clockwise:YES; / 3.繪制逆時針的圓形 UIBezierPath *arcN = UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:75 startAngle:0 endAngle:M_PI * 2 clockwise:NO; / 驗證與次數(shù)無關 UIBezierPath *arc3 = UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 230) radius:50 startAng
26、le:0 endAngle:M_PI * 2 clockwise:NO; / 4.添加路徑對象 CGContextAddPath(cxtRef, arcY.CGPath); CGContextAddPath(cxtRef, arcN.CGPath); CGContextAddPath(cxtRef, arc3.CGPath); UIColor yellowColor setFill; / 5.渲染 CGContextDrawPath(cxtRef, kCGPathFill);#pragma mark - 奇偶填充規(guī)則/ even:偶數(shù) odd:偶數(shù)/* * 奇偶填充規(guī)則解釋: * 在圖形上下文
27、中的任何一個點 * 如果它被路徑對象覆蓋了奇數(shù)次,在進行渲染操作的時候這個點就會被渲染 * 如果它被路徑對象覆蓋了偶數(shù)次,在進行渲染操作的時候這個點就不會被渲染 */- (void)evenOddRule / 獲取圖形上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 繪制水平方向矩形 UIBezierPath *rectH = UIBezierPath bezierPathWithRect:CGRectMake(50, 100, 200, 100); / 繪制圓形 UIBezierPath *arcPath = UIBezie
28、rPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:75 startAngle:0 endAngle:M_PI * 2 clockwise:YES; / 繪制豎直方向的矩形 UIBezierPath *rectV = UIBezierPath bezierPathWithRect:CGRectMake(180, 25, 50, 250); / 將路徑對象添加到圖形上下文中 CGContextAddPath(cxtRef, rectH.CGPath); CGContextAddPath(cxtRef, arcPath.CGPath
29、); CGContextAddPath(cxtRef, rectV.CGPath); UIColor orangeColor setFill; / 同時顯示stroke和fill的顏色 CGContextDrawPath(cxtRef, kCGPathEOFill);模擬下載進度條思路:在控制器中將 slider 的值傳遞給自定義 view在自定義 View中,根據(jù)傳遞過來的值繪制弧。創(chuàng)建一個與自定義 view 一樣大小的 label 來顯示下載進度#import interface DownloadView : UIView/* * 接收滑塊的值 */property (nonatomic,
30、 assign) float sliderValue;end#import DownloadView.hinterface DownloadView ()/ 需要先寫,再拖線!/* * 顯示百分比的label */property (nonatomic, weak) IBOutlet UILabel *valueLbl;endimplementation DownloadView#pragma mark - 重寫set方法,執(zhí)行重繪操作- (void)setSliderValue:(float)sliderValue _sliderValue = sliderValue; / 內部執(zhí)行重繪操作
31、 self setNeedsDisplay; self.valueLbl.text = NSString stringWithFormat:%.2f%, (sliderValue * 100);#pragma mark - 繪制下載進度條- (void)drawRect:(CGRect)rect / 1.獲取上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 2.創(chuàng)建路徑 CGFloat startA = -M_PI_2; CGFloat endA = self.sliderValue * M_PI * 2 - M_PI_2;
32、UIBezierPath *path = UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:150 startAngle:startA endAngle:endA clockwise:YES; / 保證繪制出來是扇形 path addLineToPoint:CGPointMake(150, 150); / 3.添加路徑 CGContextAddPath(cxtRef, path.CGPath); / 4.渲染 CGContextDrawPath(cxtRef, kCGPathFill);end#import Vi
33、ewController.h#import DownloadView.hinterface ViewController ()/* * 下載進度的視圖 */property (nonatomic, weak) IBOutlet DownloadView *downloadView;endimplementation ViewController#pragma mark - 滑動事件- (IBAction)sliderValueChanged:(UISlider *)sender NSLog(現(xiàn)在的值是 %f, sender.value); / 傳遞值給自定義view self.download
34、View.sliderValue = sender.value;end餅狀圖思路:構建數(shù)據(jù),NSArray *data = 30, 15, 5, 17, 3, 10, 20;。根據(jù)數(shù)據(jù)個數(shù)繪制“扇形”(?。┳⒁猓好總€弧的起始、結束弧度都是不一樣的每次繪制完畢一個弧以后都要重新設置下一次的起始弧度為當前的結束弧度本次繪制的結束弧度,為起始弧度+本次的弧度- (void)drawRect:(CGRect)rect / 1.數(shù)據(jù) NSArray *data = 30, 15, 5, 17, 3, 10, 20; / 1.2 獲取圖形上下文 CGContextRef cxtRef = UIGraphi
35、csGetCurrentContext(); / 2.遍歷 / 2.0.1 圓心,半徑 CGPoint center = CGPointMake(150, 150); CGFloat radius = 120; BOOL clockwise = YES; / 2.0.2 定義起始角度的變量 CGFloat startA = 0; for (NSInteger i = 0; i data.count; i+) / 2.1 取出數(shù)據(jù),并轉為int類型 float number = datai floatValue; / 2.2 計算所占用的角度 CGFloat AngleOfNum = numbe
36、r / 100 * (M_PI * 2); / 2.3 計算結束角度 CGFloat endA = startA + AngleOfNum; / 2.4 創(chuàng)建路徑對象 UIBezierPath *path = UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:clockwise; / 2.4.2 添加線 path addLineToPoint:center; / 2.5 添加路徑 CGContextAddPath(cxtRef, path.CGP
37、ath); / 隨機色 UIColor colorWithRed:(float)arc4random_uniform(256) / 255.0) green:(float)dom_uniform(256) / 255.0) blue:(float)arc4random_uniform(256) / 255.0) alpha:1.0 setFill; / 2.6 渲染 CGContextDrawPath(cxtRef, kCGPathFill); / 2.7 改變角度 startA = endA; 柱狀圖1.構建數(shù)據(jù), NSArray *data = 300, 150.65, 55.3, 507
38、.7, 95.8, 700, 650.65;2.根據(jù)數(shù)據(jù)的個數(shù)繪制柱狀圖。3.計算每個柱子的 x,y,w,h 即可#pragma mark - 繪制柱形圖- (void)drawRect:(CGRect)rect / 1.數(shù)據(jù) NSArray *data = 300, 150.65, 55.3, 507.7, 95.8, 700, 650.65; / 2.獲取圖形上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 計算寬度 CGFloat width = rect.size.width / (data.count * 2 - 1
39、); / 3.遍歷集合創(chuàng)建路徑對象 for (int i = 0; i 通過product-Analyze來進行內存分析2 使用注意:對于C語言的框架,通過使用”create” “copy” “retain”函數(shù)創(chuàng)建的對象,使用完畢后都要進行釋放3 解決辦法CGPathRelease();/ 釋放路徑對象CFRelease(); / 可以釋放任何對象-使用Path 對象時的內存管理問題:1 凡是遇到 retain 、 copy 、 create 出的對象, 都需要進行 release2 但是CGPathCreateMutable()不是 OC方法, 所以不是調用 某個對象的 release方法
40、3 CGXxxxxCreate 對應的就有 CGXxxxxRelease。4 通過 CFRelease(任何類型);可以釋放任何類型。圖片和文字繪制- (void)drawRect:(CGRect)rect self imageDemo; self strDemo;#pragma mark - 圖片的繪制- (void)imageDemo / 1.獲取圖片 UIImage *image = UIImage imageNamed:me; / 2.3種方式繪制 / - 從某個點開始繪制圖片 / image drawAtPoint:CGPointZero; / - 在某個區(qū)域繪制圖片 image d
41、rawInRect:CGRectMake(100, 100, 200, 300); / - 以平鋪的方式繪制圖片 / image drawAsPatternInRect:rect;#pragma mark - 繪制文字- (void)strDemo / 1.文字 NSString *str = 理想很豐滿,現(xiàn)實很滑感; / 2.繪制 NSDictionary *dict = NSFontAttributeName : UIFont systemFontOfSize:20, NSForegroundColorAttributeName : UIColor redColor ; / MARK: -
42、 1.從某個點繪制文字!/ str drawAtPoint:CGPointMake(50, 50) withAttributes:dict; / MARK: - 2.在某個區(qū)域繪制文字,并且會自動換行,如果超出范圍,顯示不全! str drawInRect:CGRectMake(100, 350, 100, 50) withAttributes:dict;自定義UIImageView剪裁原型圖片設置個人中心個性頭像- (void)drawRect:(CGRect)rect / 1.獲取圖形上下文 CGContextRef cxtRef = UIGraphicsGetCurrentContext
43、(); / MARK: - 2.在添加被裁剪路徑之前,有別的內容被渲染了,之前渲染的內容是否能夠顯示? UIBezierPath *round2 = UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 100, 100); / 添加別的路徑 CGContextAddPath(cxtRef, round2.CGPath); / 設置線寬 CGContextSetLineWidth(cxtRef, 10); / 設置線條顏色 UIColor whiteColor setStroke; / 渲染 CGContextDrawPath(c
44、xtRef, kCGPathStroke); / 2.創(chuàng)建一個要裁剪的圖形的路徑【圓形】 CGPoint center = CGPointMake(150, 150); CGFloat radius = 50; CGFloat startA = 0; CGFloat endA = M_PI * 2; BOOL clockwise = YES; UIBezierPath *path = UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:clockw
45、ise; / 3.將圓形的路徑添加到圖形上下文中不能渲染 CGContextAddPath(cxtRef, path.CGPath); / MARK: - 1.路徑被渲染了,是否還能夠裁剪? / 裁剪就達不到效果了!/ CGContextDrawPath(cxtRef, kCGPathStroke); / 4.裁剪! CGContextClip(cxtRef); / 5.把圖片畫上去 UIImage imageNamed:me drawAtPoint:CGPointMake(100, 100);剪裁圖片賦值到imageview上,并保存到沙盒或者相冊#pragma mark - 點擊裁剪按鈕調
46、用的!- (IBAction)clipBtnClick:(UIButton *)sender / 0.圖片 UIImage *image = UIImage imageNamed:me; / 1.需要開啟圖片的圖形上下文 /* * size 開啟的圖形上下文的大小 * opaque 不透明! YES不透明,四個角是黑色的!,NO透明 - NO * scale 屏幕的縮放因子! 0.0- 直接匹配當前設備屏幕的縮放因子! */ UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0); / 2.獲取當前的圖形上下文!【圖片的圖形上下文
47、】 CGContextRef cxtRef = UIGraphicsGetCurrentContext(); / 3.創(chuàng)建一個圓形的路徑 / 橢圓 - 圓形! UIBezierPath *path = UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, image.size.width, image.size.height); / 4.將圓形路徑添加到圖形上下文 CGContextAddPath(cxtRef, path.CGPath); / 5.裁剪 CGContextClip(cxtRef); / 6.把圖片繪制出來 image drawAtPoint:CGPointZero; / 7.從當前的圖形上下文中獲取圖片 UIImage *clipImg = UIGraphicsGetImageFromCurrentImageContext(); / 8.把圖片的圖形上下文進行關閉 UIGraphics
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技助力病蟲防治
- 個人住宅買賣協(xié)議規(guī)范文本(2024)版B版
- 外開門物業(yè)協(xié)議書(2篇)
- 大學生第三方就業(yè)合同(2篇)
- 2024招投標合同試題:大型體育場館設施租賃3篇
- 2024房產(chǎn)中介與金融機構合作合同2篇
- 專業(yè)測繪工程協(xié)議模板2024年版一
- 2024技術咨詢合同樣本書
- 光纜產(chǎn)品采購合同范本大全
- 智慧城市物聯(lián)網(wǎng)建設協(xié)議
- 強力夯實加固地基質量通病防治
- 《流體力學》課件
- (高清正版)T-CAGHP 015—2018地質災害治理工程監(jiān)理預算標準(試行)
- Q∕GDW 12083-2021 輸變電設備物聯(lián)網(wǎng)無線節(jié)點設備技術規(guī)范
- 公司物流倉儲規(guī)劃方案及建議書
- 智能掃地機器人畢業(yè)設計
- 佳能EOS7D數(shù)碼單反相機說明書
- 大型焰火燃放活動方案審批表
- 管道保溫層厚度的計算方法
- 噴嘴壓力計算表及選型
- 行車吊裝培訓PPT課件
評論
0/150
提交評論