成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

UIKit框架(17)Quartz2D

  • 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等)

     UIKit框架(17)Quartz2D

   

  • 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)

成都網(wǎng)頁設(shè)計公司
鄂尔多斯市| 家居| 山阳县| 安徽省| 湘阴县| 遂平县| 岫岩| 大宁县| 徐汇区| 资源县| 泸州市| 冀州市| 冀州市| 东丽区| 专栏| 苍溪县| 东兰县| 无锡市| 徐汇区| 滦南县| 阜新| 通城县| 黎城县| 威宁| 仪陇县| 响水县| 子洲县| 永泰县| 威信县| 江城| 星子县| 新津县| 温宿县| 宽甸| 南昌市| 赫章县| 西贡区| 金平| 阳原县| 花莲县| 定襄县|