CoreGraphics/QuartZ

參考文檔1
參考文檔2
參考文檔3
參考文檔4

  1. OS支持兩套圖形API族:Core Graphics/QuartZ 2D 和OpenGL ES糜值。
    OpenGL ES是跨平臺的圖形API蝙叛,屬于OpenGL的一個簡化版本邻眷。
    QuartZ 2D是蘋果公司開發(fā)的一套API,它是Core Graphics Framework的一部分哮幢。
  1. OpenGL ES是應用程序編程接口畸裳,該接口描述了方法、結構装蓬、函數(shù)應具有的行為以及應該如何被使用的語義。也就是說它只定義了一套規(guī)范纱扭,具體的實現(xiàn)由設備制造商根據(jù)規(guī)范去做牍帚。
  2. drawRect 被調(diào)用
    a.
    -[DrawLineViewcontroller loadView]
    -[DrawLineViewcontroller viewDidLoad]
    -[DrawLineViewcontroller viewWillAppear:]
    -[DrawLineView drawRect:]
    -[DrawLineViewcontroller viewDidAppear:]
    b.
    調(diào)用view的setNeedsDisPlay或setNeedsDisplayInRect:時
    c.
    sizeToFit:

下面的示例代碼僅羅列了極為簡單的示例

- (void)drawRect:(CGRect)rect {

#pragma mark - 繪制基本圖形
    
    // 在drawRect方法中調(diào)用UIGraphicsGetCurrentContext方法獲取出來的就是Layer的上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    // 繪圖(繪制直線), 保存繪圖信息
    // 設置起點
    CGContextMoveToPoint(context, 50, 100);
    // 設置終點
    CGContextAddLineToPoint(context, 100, 100);
    
    // 設置線條顏色 紅色
    CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1.0);
    // 設置線條寬度
    CGContextSetLineWidth(context, 10);
    
    // 設置線條的起點和終點的樣式
    CGContextSetLineCap(context, kCGLineCapRound);
    // 設置線條的轉角的樣式
    CGContextSetLineJoin(context, kCGLineJoinRound);
    // 繪制一條線
    CGContextStrokePath(context);
    
    //繪制第二條線
    CGContextMoveToPoint(context, 150, 200);
    //設置第二系線的終點
    CGContextAddLineToPoint(context, 50, 100);
    //設置第二條線顏色
    CGContextSetRGBStrokeColor(context, 0, 1.0, 0, 1.0);
    //繪制
    CGContextStrokePath(context);
    
    //繪制三角形
    CGContextMoveToPoint(context, 50, 50);
    CGContextAddLineToPoint(context, 100, 100);
    CGContextAddLineToPoint(context, 150, 100);
    CGContextClosePath(context);
    CGContextStrokePath(context);
    
    //繪制圓
    CGContextSetLineWidth(context, 2);
    CGContextAddEllipseInRect(context, CGRectMake(200, 200, 10, 10));
    [[UIColor orangeColor] set];
    CGContextFillPath(context);//實心圓
    //CGContextStrokePath(context);//空心圓
    
    //繪制矩形
    CGContextAddRect(context, CGRectMake(10, 10, 50, 50));
    [[UIColor colorWithRed:1.0 green:0 blue:0 alpha:1] set];
    //CGContextStrokePath(context);
    CGContextFillPath(context);
    
    //繪制圓弧                  圓心    半徑  開始弧度  結束弧度 0表順針
    CGContextAddArc(context, 100, 100, 50, -M_PI_2, M_PI_2, 0);
    CGContextStrokePath(context);
    
    //繪制餅圖
    //畫線
    CGContextMoveToPoint(context, 100, 300);
    CGContextAddLineToPoint(context, 100, 150);
    //畫弧
    CGContextAddArc(context, 100, 300, 50, M_PI_2, M_PI, 0);
    //并閉路徑
    CGContextClosePath(context);
    CGContextFillPath(context);
#pragma mark - 繪制圖片或文字
    UIImage *image = [UIImage imageNamed:@"4.jpg"];
    NSString *str = @"Fuck the world";
    [image drawInRect:CGRectMake(0, 0, 300, 300)];
    [str drawAtPoint:CGPointMake(100,400) withAttributes:@{
                                                           NSFontAttributeName:[UIFont systemFontOfSize:20]
                                                           }];
}

或者

- (void)drawRect:(CGRect)rect {
    // Drawing code
    NSLog(@"%s",__func__);
    //1.獲取上下文
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    //2.描述路徑
    UIBezierPath * path = [UIBezierPath bezierPath];
    //起點
    [path moveToPoint:CGPointMake(10, 10)];
    //終點
    [path addLineToPoint:CGPointMake(100, 100)];
    //設置顏色
    [[UIColor whiteColor]setStroke];
    //3.添加路徑
    CGContextAddPath(contextRef, path.CGPath);
    //顯示路徑
    CGContextStrokePath(contextRef);

 }
- (void)drawRect:(CGRect)rect {
    //1、獲取當前上下文
    CGContextRef  contextRef = UIGraphicsGetCurrentContext();
    //2.描述路徑
    //ArcCenter:中心點
    //radius:半徑
    //startAngle:起始角度
    //endAngle:結束角度
    //clockwise:是否逆時針
    UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width*0.5, self.bounds.size.height*0.5) radius:self.bounds.size.width*0.4 startAngle:0 endAngle:M_PI*2 clockwise:NO];
    //3.添加路徑到上下文
    CGContextAddPath(contextRef, path.CGPath);
    //4.設置顏色
    [[UIColor brownColor]setFill];
    //4.顯示上下文 顯示一個實心圓
    //CGContextFillPath(contextRef);
    //顯示一個空心圓跪但,描邊
    CGContextStrokePath(contextRef);
}

畫三條不同顏色的線

    //1 獲取上下文
    //分別設置線段的顏色
    CGContextRef purple = UIGraphicsGetCurrentContext();
    [[UIColor purpleColor]setStroke];
    CGContextSaveGState(purple);//存儲上下文
    
    CGContextRef orange = UIGraphicsGetCurrentContext();
    [[UIColor orangeColor]setStroke];
    CGContextSaveGState(orange);
    
    CGContextRef green = UIGraphicsGetCurrentContext();
    [[UIColor greenColor]setStroke];
    CGContextSaveGState(green);
    
    
    UIBezierPath * path = [UIBezierPath bezierPath];
    //設置線寬
    path.lineWidth = 5;
    
    //把紫色的上下文從棧中取出來
    CGContextRestoreGState(purple);
    //第一條線
    [[UIColor purpleColor]setStroke];
    [path moveToPoint:CGPointMake(10, 10)];
    [path addLineToPoint:CGPointMake(10, 100)];
    [path stroke];
    
    
    //把紫色的上下文從棧中取出來
    CGContextRestoreGState(orange);
    path = [UIBezierPath bezierPath];
    //設置線寬
    path.lineWidth = 9;
    //第二條線
    [[UIColor orangeColor]setStroke];
    [path moveToPoint:CGPointMake(30, 10)];
    [path addLineToPoint:CGPointMake(30, 100)];
    [path stroke];
    
    //把紫色的上下文從棧中取出來
    CGContextRestoreGState(green);
    path = [UIBezierPath bezierPath];
    //設置線寬
    path.lineWidth = 3;
    //第三條線
    [[UIColor greenColor]setStroke];
    [path moveToPoint:CGPointMake(50, 10)];
    [path addLineToPoint:CGPointMake(50, 100)];
    [path stroke];

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末履羞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屡久,更是在濱河造成了極大的恐慌忆首,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件被环,死亡現(xiàn)場離奇詭異糙及,居然都是意外死亡,警方通過查閱死者的電腦和手機筛欢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門浸锨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人版姑,你說我怎么就攤上這事柱搜。” “怎么了剥险?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵聪蘸,是天一觀的道長。 經(jīng)常有香客問我表制,道長健爬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任么介,我火速辦了婚禮娜遵,結果婚禮上,老公的妹妹穿的比我還像新娘壤短。我一直安慰自己设拟,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布久脯。 她就那樣靜靜地躺著蒜绽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桶现。 梳的紋絲不亂的頭發(fā)上躲雅,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音骡和,去河邊找鬼相赁。 笑死,一個胖子當著我的面吹牛慰于,可吹牛的內(nèi)容都是我干的钮科。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼婆赠,長吁一口氣:“原來是場噩夢啊……” “哼绵脯!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蛆挫,失蹤者是張志新(化名)和其女友劉穎赃承,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悴侵,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瞧剖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了可免。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抓于。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浇借,靈堂內(nèi)的尸體忽然破棺而出捉撮,到底是詐尸還是另有隱情,我是刑警寧澤妇垢,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布呕缭,位于F島的核電站,受9級特大地震影響修己,放射性物質(zhì)發(fā)生泄漏恢总。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一睬愤、第九天 我趴在偏房一處隱蔽的房頂上張望片仿。 院中可真熱鬧,春花似錦尤辱、人聲如沸砂豌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阳距。三九已至,卻和暖如春结借,著一層夾襖步出監(jiān)牢的瞬間筐摘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工船老, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咖熟,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓柳畔,卻偏偏與公主長得像馍管,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薪韩,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容