Quartz2D介紹
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了新區(qū)免費建站歡迎大家使用!
什么是Quartz2D ?
是一個二維繪圖引擎,同時支持iOS和Mac系統(tǒng)。
Quartz2D的價值?
但是有些UI界面極其復(fù)雜,而且比較個性化,用普通的UI控件無法實現(xiàn),這時可以利用Quartz2D技術(shù)將控件內(nèi)部的結(jié)構(gòu)畫出來,自定義控件的樣子。
其實,iOS中大部分控件的內(nèi)容都是由Quartz2D畫出來的 (有一些是通過WebKit渲染的)
開發(fā)方式?
使用框架CoreGraphics
Quartz2D是一套C語言API,但使用了面向?qū)ο蟮拈_發(fā)方式
圖像上下文對象:
是最核心的對象,CGContextRef類型
iOS中的很多C語言框架中,都有以Ref作為后綴的類型,這些類型都可以理解為對象
如CFStringRef CFColorRef CFImageRef等
上下文的作用:
保存繪圖信息、狀態(tài);決定繪圖的輸出目標(biāo)(視圖對象的圖層、p_w_picpath畫板、pdf等)
UIView的繪制
繪制一個UIView,需要在子類中重寫drawRect:方法
- (void)drawRect:(CGRect)rect
該方法中,會自動創(chuàng)建愛一個當(dāng)前view對象圖層的上下文對象,通過以下函數(shù)獲取
CGContextRef UIGraphicsGetCurrentContext ( void );
UIView的刷幀:
UIView子類的drawRect:方法調(diào)用的時機(jī):
1)對象第一次顯示時
2)調(diào)用view對象的setNeedsDisplay或setNeedsDisplayInRect方法
所以,通過setNeedsDisplay方法可以實現(xiàn)圖形的刷幀(重繪)操作。
- (void)setNeedsDisplay
圖片的繪制
圖片繪制的上下文需要用代碼創(chuàng)建:
void UIGraphicsBeginImageContext ( CGSize size ); //標(biāo)識上下文的開始 void UIGraphicsEndImageContext ( void ); //標(biāo)識上下文的結(jié)束
size參數(shù):圖片畫布的大小
在這個方位內(nèi),通過UIGraphicsGetCurrentContext()函數(shù)可以獲得該上下文對象
獲得當(dāng)前上下文中繪制的UIImage對象
UIImage * UIGraphicsGetImageFromCurrentImageContext ( void );
UIImage對象保存到照片的函數(shù):
void UIImageWriteToSavedPhotosAlbum ( UIImage *p_w_picpath, id completionTarget, SELcompletionSelector, void *contextInfo );
繪制的方式
繪制的步驟:
1)獲得上下文對象
2)進(jìn)行繪制
3)渲染
獲得上下文后,就可以在上下文上進(jìn)行圖形的繪制,繪制的內(nèi)容需要渲染到上下文
void CGContextStrokePath ( CGContextRef c ); //邊界方式渲染 void CGContextFillPath ( CGContextRef c ); //填充方式渲染
設(shè)置畫筆的顏色:
void CGContextSetRGBStrokeColor ( CGContextRef context, CGFloat red, CGFloatgreen, CGFloat blue, CGFloat alpha ); void CGContextSetRGBFillColor ( CGContextRef context, CGFloat red, CGFloatgreen, CGFloat blue, CGFloat alpha );
也可以通過UIColor對象的set方式設(shè)置
- (void)set - (void)setFill - (void)setStroke
設(shè)置畫筆線寬:
void CGContextSetLineWidth ( CGContextRef c, CGFloat width );
設(shè)置畫筆起止點的樣式:
void CGContextSetLineCap ( CGContextRef c, CGLineCap cap );
設(shè)置畫筆轉(zhuǎn)折點的樣式:
void CGContextSetLineJoin ( CGContextRef c, CGLineJoin join );
畫筆狀態(tài)的保存/恢復(fù)(棧式)
void CGContextSaveGState ( CGContextRef c ); void CGContextRestoreGState ( CGContextRef c );
繪制基本形狀
確定繪制位置:
void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y );
繪制線段:
void CGContextAddLineToPoint ( CGContextRef c, CGFloat x, CGFloat y ); //從當(dāng)前位置繪制到指定位置 void CGContextAddLines ( CGContextRef c, const CGPoint points[], size_t count ); //多點繪制 void CGContextClosePath ( CGContextRef c ); //繪制封閉線段
繪制矩形:
void CGContextAddRect ( CGContextRef c, CGRect rect );
繪制橢圓:
void CGContextAddEllipseInRect ( CGContextRef context, CGRect rect );
繪制圓弧:
void CGContextAddArc ( CGContextRef c, CGFloat x, CGFloat y, CGFloat radius,CGFloat startAngle, CGFloat endAngle, int clockwise );
路徑繪制
基于貝塞爾曲線的繪制(UIBezierPath)
+ (instancetype)bezierPath - (void)moveToPoint:(CGPoint)point - (void)addLineToPoint:(CGPoint)point - (void)closePath - (void)removeAllPoints @property(nonatomic) CGFloat lineWidth @property(nonatomic) CGLineCap lineCapStyle @property(nonatomic) CGLineJoin lineJoinStyle - (void)fill - (void)stroke
基于CGPath的繪制
CGMutablePathRef CGPathCreateMutable ( void ); void CGPathMoveToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y ); void CGPathAddLineToPoint ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y ); void CGPathAddRect ( CGMutablePathRef path, const CGAffineTransform *m, CGRect rect ); void CGPathAddEllipseInRect ( CGMutablePathRef path, const CGAffineTransform *m, CGRect rect ); void CGPathAddArc ( CGMutablePathRef path, const CGAffineTransform *m, CGFloat x, CGFloat y, CGFloat radius,CGFloat startAngle, CGFloat endAngle, bool clockwise ); void CGPathRelease ( CGPathRef path );
繪制文字
在上下文上繪制文字,需要使用NSString的方法:
- (void)drawInRect:(CGRect)rect - (void)drawAtPoint:(CGPoint)point
繪制圖片
- (void)drawInRect:(CGRect)rect - (void)drawAtPoint:(CGPoint)point blendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha - (void)drawAtPoint:(CGPoint)point - (void)drawAtPoint:(CGPoint)point blendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha
屏幕截圖
步驟:
a. 創(chuàng)建位圖上下文
b. 需要截圖的view,將其layer繪制到上下文
view對象的layer屬性(即view的圖形)繪制到上下文的方法
- (void)renderInContext:(CGContextRef)ctx
c. 從位圖上下文獲得UIImage對象
d. 結(jié)束位圖上下文
分享名稱:UIKit框架(17)Quartz2D
網(wǎng)站路徑:http://jinyejixie.com/article46/posphg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、外貿(mào)建站、軟件開發(fā)、關(guān)鍵詞優(yōu)化、Google、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)