IOS開發之——基本圖像繪製-基本線條

文章搬運來源:blog.csdn.net/Calvin_zhou…面試

做者:PGzxcmarkdown

對iOS開發感興趣,能夠看一下做者的iOS交流羣:812157648,你們能夠在裏面吹水、交流相關方面的知識,羣裏還有我整理的有關於面試的一些資料,歡迎你們加羣,你們一塊兒開車框架

一 什麼是Quartz2D

  • Quartz 2D是一個二維繪圖引擎,同時支持iOS和Mac系統
  • Quartz 2D能完成的工做:
    • 繪製圖形:線條\三角形\矩形\園\弧等
    • 繪製文字
    • 繪製\生成圖片(圖像)
    • 讀取\生成PDF
    • 截圖\裁剪圖片
    • 自定義UI控件

二 Quart 2D實例

Quart 2D能作不少強大的事情,例如:oop

  • 裁剪圖片:圓形裁剪
  • 塗鴉\畫板
  • 手勢解鎖

三 Quart 2D 在iOS開發中的價值

  • 爲了便於搭建美觀的UI界面,iOS提供了UIKit框架,裏面有各類各樣的UI控件spa

    • UILabel:顯示文字
    • UIImageView:顯示圖片
    • UIButton:同時顯示圖片和文字(能點擊)
  • 利用UIKit框架提供的控件,拼拼湊湊,能搭建和實現一些簡單、常見的UI界面.net

  • 可是,有些UI界面及其複雜、並且比較個性化,用普通的UI控件沒法實現,這時能夠利用Quart2D技術將控件內部的結構畫出來,自定義控件的樣子code

  • 其實,iOS中大部分控件的內容都是經過Quart2D畫出來的orm

  • 所以,Quart2D在iOS開發中很重的一個價值是:自定義view(自定義UI控件)blog

四 圖形上下文

  • 圖形上下文(Graphics Context):是一個CGContextRef類型的數據
  • 圖形上下文的做用:
    • 保存繪圖信息、繪圖狀態
    • 決定繪製的輸出目標(繪製到什麼地方去?)(輸出目標能夠是PDF文件、Bitmap或者顯示器的窗口上)
  • 相同的一套繪圖序列,指定不一樣的Graphics Context,就能夠將相同的圖像繪製到不一樣的目標上
  • Quart2D提供瞭如下幾種類型的Graphics Context
    • Bitmap Graphics Context
    • PDF Graphics Context
    • Windows Graphics Context
    • Layer Graphics Context
    • Printer Graphics Context

五 自定義UI控件

如何利用Quart2D自定義UI控件?繼承

5.1 如何利用Quart2D繪製東西到view上

  • 首先,得有圖形上下文,由於它能保存繪圖信息,而且決定着繪製到什麼地方去
  • 其次,那個圖形上下文必須跟view相關聯,才能將內容繪製到view上面

5.2 自定義UI控件的步驟

  • 新建一個類,繼承自UIView
  • 實現-(void)drawRect:(CGRect)rect方法,而後在這個方法中,能夠
    • 取得跟當前view相關聯的圖形上下文
    • 繪製相應的圖形內容,繪製時產生的線條稱爲路徑。路徑由一個或多個直線或曲線組成
    • 利用圖形上下文將繪製的全部內容渲染顯示到view上面

六 實例

6.1 畫折線

思路

  • 獲取上下文
  • 設置繪圖信息(拼接路徑)
  • 將路徑添加到上下文
  • 把上下文渲染到視圖

代碼

- (void)drawRect:(CGRect)rect {
   // NSLog(@"%@",NSStringFromCGRect(rect));
   //1.獲取上下文
    //CGContextRef CG CoreGraphics Ref引用
    //目前學的上下文都跟UIGraphics有關,之後想直接獲取上下文,直接敲一個UIGraphics
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //2.設置繪圖信息(拼接路徑)
    UIBezierPath *path=[UIBezierPath bezierPath];
    //設置起點
    [path moveToPoint:CGPointMake(10, 10)];
    //添加一條線到某個點
    [path addLineToPoint:CGPointMake(125, 125)];
    [path addLineToPoint:CGPointMake(240, 10)];
    //3.將路徑添加到上下文,直接把UIKit的路徑轉換成CoreGraphics,CG開頭就能轉
    CGContextAddPath(ctx, path.CGPath);
    //4.把上下文渲染到視圖,stroke描邊
    CGContextStrokePath(ctx);  
}  

複製代碼

效果圖

image

6.2 設置交叉線及顏色和線寬

代碼

- (void)drawRect:(CGRect)rect {

    //1.獲取上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //設置起點
    UIBezierPath *path=[UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(10,125)];
    //添加一條線到某個點
    [path addLineToPoint:CGPointMake(230, 125)];
    //設置起點
    //[path moveToPoint:CGPointMake(10,10)];
    //添加一條線到某個點
    //[path addLineToPoint:CGPointMake(125,100)];

    UIBezierPath *path1=[UIBezierPath bezierPath];
    [path1 moveToPoint:CGPointMake(10, 10)];
    [path1 addLineToPoint:CGPointMake(125, 100)];

    //3.把路徑添加到上下文
    CGContextAddPath(ctx, path.CGPath);
    CGContextAddPath(ctx,path1.CGPath);
    //設置繪圖狀態
    //設置線寬
    CGContextSetLineWidth(ctx, 10);
    CGContextSetLineCap(ctx, kCGLineCapRound);
    [[UIColor redColor]set];

    //4.渲染上下文到視圖
    CGContextStrokePath(ctx);  
}

複製代碼

效果圖

image

6.3 畫曲線

代碼

- (void)drawRect:(CGRect)rect {
    //1.獲取上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //2拼接路徑
    UIBezierPath *path=[UIBezierPath bezierPath];
    CGPoint startP=CGPointMake(10, 125);
    CGPoint endP=CGPointMake(240, 125);
    CGPoint controlP=CGPointMake(125,0);
    [path moveToPoint:startP];
    [path addQuadCurveToPoint:endP controlPoint:controlP];
    //3.把路徑添加到上下文
    CGContextAddPath(ctx, path.CGPath);
    //4.渲染上下文到視圖
    CGContextStrokePath(ctx);

}

複製代碼

效果圖

image

相關文章
相關標籤/搜索