Quart2D繪圖

iOS 可以用的畫筆:

本文參考:
http://www.360doc.com/content/15/0929/15/11764545_502227892.shtml

相關(guān)庫(kù)

1锐峭, CGPath
CoreGraphics--CGPath.h

2臊旭, CGContext
CoreGraphics--CGContext.h

3筹麸,UIBezierPath
UIKit---UIBezierPath

流程總結(jié)

1蛋褥、畫布-》

2如贷、
構(gòu)建路徑:開(kāi)始勺美、構(gòu)建冬殃、閉合-》
或者直接在畫布上構(gòu)建路徑

3谣拣、設(shè)置描邊顏色募寨、填充顏色、線條連接樣式森缠、收尾兩端樣式-》

4拔鹰、給畫布增加路徑-》

5、繪制: 描邊 或是 填充

代碼實(shí)踐

#import "MyDrawView.h"
#define rad(x) ((x)*M_PI/ 180.0)

@implementation MyDrawView

-(void)drawRect:(CGRect)rect {
    // 在畫布上直接操作路徑贵涵。
    [self line];
    
    
    //    [self arc];
    
    // 先操作路徑, 然后添加到畫布上格郁。當(dāng)畫布繪制后,路徑就沒(méi)有了独悴。  所以才有了保存路徑的
    //    [self pathLine];
}

-(void)pathLine{
    
    
    // 1例书、畫布
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    // 2、路徑
    CGMutablePathRef path= CGPathCreateMutable();
    CGPathAddArc(path, NULL, CGRectGetMidX(self.frame), 300, 200, 0, 2*M_PI, 1);
    CGPathCloseSubpath(path);
    
    
    
    
    
    // 添加一個(gè)路徑到畫布
    [self track:context];
    CGContextAddPath(context, path);// 畫布上有路徑了
    [self track:context];
    
    
    // 3刻炒、設(shè)置  顏色决采、線的樣式
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
    
    // 兩條線連接處的樣式
    CGContextSetLineJoin(context, kCGLineJoinRound);
    
    // 線的收尾兩端的樣式
    CGContextSetLineCap(context, kCGLineCapButt);
    
    // 線的寬度
    CGContextSetLineWidth(context, 30);
    
    
    
    
    // 4、繪制
    [self track:context];
    CGContextDrawPath(context, kCGPathFillStroke);
    // 畫布清空了
    [self track:context];
    
}
-(void)line{
    CGFloat top=50;
    CGFloat left=30;
    CGFloat w=200;
    CGFloat h=60;
    // 1坟奥、畫布
    CGContextRef context= UIGraphicsGetCurrentContext();
    
    
    // 2树瞭、路徑
    // 構(gòu)建路徑之前,先標(biāo)記
    CGContextBeginPath(context);
    //CGContextMoveToPoint(context, 100, 100);
    CGPoint p[6] = {
        {left+w, top},
        {left, top},
        {left, top+h},
        {left+w, top+h},
        {left+w, top+2.0*h},
        {left, top+2.0*h}
    };
    [self track:context];
    CGContextAddLines(context, p, 6);// 畫布上有路徑了
    [self track:context];
    
    // 閉合當(dāng)前路徑爱谁, 隨后為一個(gè)新路徑晒喷, 新路徑起點(diǎn)為當(dāng)前點(diǎn)
    CGContextClosePath(context);
    [self track:context];
    
    
    // 測(cè)一下新的子路徑
    top = top+3.0*h;
    CGPoint p2[6] = {
        {left+w, top},
        {left, top},
        {left, top+h},
        {left+w, top+h},
        {left+w, top+2.0*h},
        {left, top+2.0*h}
    };
    CGContextAddLines(context, p2, 6);// 畫布上有路徑了
    
    
    // 3、設(shè)置  顏色访敌、線的樣式
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
    
    // 兩條線連接處的樣式
    //    kCGLineJoinMiter, 斜切連接
    //    kCGLineJoinRound, 圓角連接
    //    kCGLineJoinBevel凉敲, 斜角連接
    CGContextSetLineJoin(context, kCGLineJoinRound);
    
    // 線的收尾兩端的樣式
    CGContextSetLineCap(context, kCGLineCapButt);
    
    // 線的寬度
    //    kCGLineCapButt,
    //    kCGLineCapRound,
    //    kCGLineCapSquare
    CGContextSetLineWidth(context, 5);
    
    // 虛線模式
    //    (CGContextRef cg_nullable c,
    //     CGFloat phase, // 虛線的起始點(diǎn)
    //     const CGFloat * __nullable lengths, // 繪制片段 與 未繪制片段 交替
    //     size_t count)
    //CGFloat a[] = { 1.0f, 2.0f, 30.0f };
    //CGContextSetLineDash(context, 0, a , 3);
    
    // 4、繪制
    //    kCGPathFill,
    //    kCGPathEOFill,
    //    kCGPathStroke,
    //    kCGPathFillStroke,
    //    kCGPathEOFillStroke
    // 描邊當(dāng)前路徑
    [self track:context];
    CGContextDrawPath(context, kCGPathFillStroke);
    [self track:context];
    
    // 便捷函數(shù):
    //    CGContextFillPath(context)
    // 描邊當(dāng)前路徑
    //    CGContextStrokePath(context)
    //    CGContextEOFillPath(context)
    
    // 描邊指定矩形的內(nèi)切圓
    
    CGContextStrokeEllipseInRect(context, self.bounds);
    // 畫布上的路徑被清空了嗎
    [self track:context];
    
    
    // 用指定的線寬來(lái)描邊矩形
    CGContextStrokeRectWithWidth(context, CGRectInset(self.bounds, 30, 30), 10);
    
    top = top+6.0*h;
    CGPoint p3[6] = {
        {left+w, top},
        {left, top},
        {left, top+h},
        {left+w, top+h},
        {left+w, top+2.0*h},
        {left, top+2.0*h}
    };
    // 描邊線段序列--指定起點(diǎn)、終點(diǎn)的成對(duì)的點(diǎn)爷抓,來(lái)描每一條線段势决。點(diǎn)1,點(diǎn)2組成一條線段蓝撇,點(diǎn)3果复,點(diǎn)4組成一條線段,以此類推
    CGContextStrokeLineSegments(context, p3, 6);
    // 描邊指定矩形
    CGContextStrokeRect(context, CGRectInset(self.bounds, 60, 60));
    
    
    // 畫布上的路徑被清空了
    [self track:context];
}
-(void)arc{
    // 1渤昌,畫布
    CGContextRef context= UIGraphicsGetCurrentContext();
    
    // 2虽抄、設(shè)置
    [[UIColor redColor] set];
    
    // 3、路徑
    CGContextBeginPath(context);
    CGContextAddArc(context, 160, 230, 100, 0, 2*M_PI, 1);
    CGContextClosePath(context);
    // 4独柑、繪制
    CGContextStrokePath(context);
    
    
}

-(void)track:(CGContextRef)context {
    
    // 測(cè)試一下畫布上有沒(méi)有路徑极颓,  或者說(shuō)畫布有沒(méi)有被清空
    CGPoint point= CGContextGetPathCurrentPoint(context);
    CGRect rect= CGContextGetPathBoundingBox(context);
    NSLog(@"%@,  %@",  NSStringFromCGRect(rect), NSStringFromCGPoint(point));
    
}

@end


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市群嗤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兵琳,老刑警劉巖狂秘,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異躯肌,居然都是意外死亡者春,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門清女,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钱烟,“玉大人,你說(shuō)我怎么就攤上這事嫡丙∷┫” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵曙博,是天一觀的道長(zhǎng)拥刻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)父泳,這世上最難降的妖魔是什么般哼? 我笑而不...
    開(kāi)封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮惠窄,結(jié)果婚禮上蒸眠,老公的妹妹穿的比我還像新娘。我一直安慰自己杆融,他們只是感情好楞卡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般臀晃。 火紅的嫁衣襯著肌膚如雪觉渴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天徽惋,我揣著相機(jī)與錄音案淋,去河邊找鬼。 笑死险绘,一個(gè)胖子當(dāng)著我的面吹牛踢京,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宦棺,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓣距,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了代咸?” 一聲冷哼從身側(cè)響起蹈丸,我...
    開(kāi)封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呐芥,沒(méi)想到半個(gè)月后逻杖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡思瘟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年荸百,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滨攻。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡够话,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出光绕,到底是詐尸還是另有隱情女嘲,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布诞帐,位于F島的核電站澡为,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏景埃。R本人自食惡果不足惜媒至,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谷徙。 院中可真熱鬧拒啰,春花似錦、人聲如沸完慧。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至册着,卻和暖如春拴孤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甲捏。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工演熟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人司顿。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓芒粹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親大溜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子化漆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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