UIBezierPath繪制基本圖形

說到繪圖, 就想到UIView中的一個(gè)方法: drawRect方法, 那么簡(jiǎn)單介紹一下它的作用:

1. 可以將圖形繪制到, view上(因?yàn)樵谠摲椒ㄖ? 可以獲取到跟view相關(guān)聯(lián)的圖形上下文.)
2. 什么時(shí)候被調(diào)用?
    2.1 在View第一次顯示到屏幕上時(shí).(被加載到UIWindow上顯示出來的時(shí)候);
    2.2 在調(diào)用View的setNeedsDisplay: 或者 setNeedsDisplayInRect: 的時(shí)候
3. rect : 是當(dāng)前控件的bounds ```
***

 >###UIBezierPath的基本使用:
  1. UIBezierPath對(duì)象, 是對(duì)CGPathRef數(shù)據(jù)類型的封裝. path如果是基于矢量圖(面向?qū)ο髨D形, 或者是繪圖圖像), 都用直線或者曲線去創(chuàng)建.
  2. 使用直線, 創(chuàng)建矩形和多邊形 / 使用曲線段, 創(chuàng)建弧, 圓形或者其他復(fù)雜曲線形狀.
  3. 每一段都包括一個(gè),或者多個(gè)點(diǎn).
  4. 每一個(gè)直線段/曲線段結(jié)束的地方, 就是下一個(gè)線段開始的地方.
  5. 每一個(gè)連接的直線段或者曲線段的集合, 稱為: subPath.
  6. 一個(gè)UIBezierPath對(duì)象, 定義一個(gè)完整的路徑, 包括一個(gè)或者多個(gè)subPath.
  7. 創(chuàng)建path對(duì)象, 使用Path對(duì)象的過程, 是分開的, 創(chuàng)建path是第一步,具體步驟如下:
    7.1: 創(chuàng)建一個(gè)Path對(duì)象.
    7.2: 使用moveToPoint: 去設(shè)置出線段的起點(diǎn).```

繪圖實(shí)例(一下所有方法, 都必須在drawRect方法中調(diào)用), 一下代碼都是必要的基礎(chǔ)代碼, 路徑的屬性進(jìn)行簡(jiǎn)單描述.

1. 繪制值線段


- (void)path1{
    
    //1. 創(chuàng)建路徑
    UIBezierPath *path = [UIBezierPath bezierPath];
    
    //2. 設(shè)置起始點(diǎn)
    [path moveToPoint:CGPointMake(20, 20)];
    
    //3. 設(shè)置結(jié)束點(diǎn)(即第二條線段的開始點(diǎn))
    [path addLineToPoint:CGPointMake(100, 100)];
    
    //4.  連線
    [path stroke];
#********************************************************    
#描述:     
 線和多邊形是一些簡(jiǎn)單形狀, 可以使用moveToPoint: 或者addLineToPoint: 方法去構(gòu)建. 
moveToPoint: 設(shè)置我們想要?jiǎng)?chuàng)建形狀的起點(diǎn), 從該點(diǎn)開始我們可以使用方法addLineToPoint: 
去創(chuàng)建一個(gè)形狀的線段, 也可以連續(xù)的創(chuàng)建line, 每一個(gè)line的起點(diǎn)都是先前線段的終點(diǎn), 
終點(diǎn)就是制定的點(diǎn)CGPointMake.

#路徑屬性:(路徑的屬性都應(yīng)該寫在繪制路徑前面才能有效)
線寬 
   path.lineWidth = 5.0;
線段顏色
   UIColor *color = [UIColor orangeColor];
   [color set];
線條拐角
    path.lineCapStyle = kCGLineCapRound;
連接點(diǎn)
    path.lineJoinStyle = kCGLineJoinRound;
#********************************************************        
    
}```
####2. 繪制多邊型(在繪制線段的基礎(chǔ)上)
```code
- (void)path2{
    
    //1. 繪制路徑
    UIBezierPath *path = [UIBezierPath bezierPath];
    
    //2. 設(shè)置起始點(diǎn)
    [path moveToPoint:CGPointMake(20, 100)];
    
    //3. 添加線段(通過給出的點(diǎn), 連接出路徑)
    [path addLineToPoint:CGPointMake(100, 100)];
    [path addLineToPoint:CGPointMake(30, 200)];
    [path addLineToPoint:CGPointMake(50, 50)];
    [path addLineToPoint:CGPointMake(70, 200)];
    
    //4. 閉合路徑
    [path closePath];
    
    //5. 繪制路徑
    [path stroke];
}```
####3. 利用圖形上下文繪制直線
```code
- (void)contextDraw{
    
    //1. 獲取當(dāng)前的上下文
    CGContextRef cxt = UIGraphicsGetCurrentContext();
    
    //2. 設(shè)置起始點(diǎn)
    CGContextMoveToPoint(cxt, 20, 100);
    
    //3. 設(shè)置中的
    CGContextAddLineToPoint(cxt, 100, 50);
    
    //4. 渲染上下文
    CGContextDrawPath(cxt, kCGPathStroke);

#屬性: 圖形上下文的屬性************************************
    //線寬
    CGContextSetLineWidth(cxt, 50.0);
    //顏色
    CGContextSetRGBStrokeColor(cxt, 0, 1, 0, 1);
    //[[UIColor redColor] set];
    //線的樣式
    CGContextSetLineCap(cxt, kCGLineCapRound);
    //填充
    [[UIColor greenColor] setFill];
#********************************************************    
    
}```

####4. 利用上下文繪制曲線
```code
- (void)drawCurveLine{
    
    //1. 獲取圖形上下文
    CGContextRef cxt = UIGraphicsGetCurrentContext();
    
    //2. 創(chuàng)建路徑
    UIBezierPath *path = [UIBezierPath bezierPath];
    
    //3. 設(shè)置起始點(diǎn)
    [path moveToPoint:CGPointMake(20, 50)];
    
 *  //4. 設(shè)置曲線
    [path addCurveToPoint:CGPointMake(200, 50) controlPoint1:CGPointMake(50, 20) controlPoint2:CGPointMake(80, 90)];
    
    //5. 將路徑添加到上下文
    CGContextAddPath(cxt, path.CGPath);
    
    //6. 渲染上下文
    CGContextDrawPath(cxt, kCGPathStroke);
    
    
}```
####5. 利用上下文繪制矩形
```code
- (void)drawSquare{
    
    //1. 獲取圖形上下文
    CGContextRef cxt = UIGraphicsGetCurrentContext();
    
 *  //2. 繪制路徑
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 150, 150) cornerRadius:0];
    
    //3. 將路徑添加到上下文
    CGContextAddPath(cxt, path.CGPath);
    
    //4. 渲染
    CGContextDrawPath(cxt, kCGPathStroke);
}```
####6. 利用上下文繪制弧形
```code
- (void)drawBow{
    
    //1. 獲取圖形上下文
    CGContextRef cxt = UIGraphicsGetCurrentContext();
    
 *  //2. 繪制路徑
    //參數(shù)一: 表示弧形的終點(diǎn)
    //參數(shù)二: 表示起始角度(0代表: X軸正半軸, Y為0 的角度)
    //參數(shù)三: 表示結(jié)束位置的角度
    //參數(shù)四: 表示是否是順時(shí)針繪制
    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:50 startAngle:0 endAngle:M_PI_2 clockwise:YES];
    
    //3. 添加到上下文
    CGContextAddPath(cxt, path.CGPath);
    
    //4. 渲染
    CGContextDrawPath(cxt, kCGPathStroke);
}```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疫稿,一起剝皮案震驚了整個(gè)濱河市勘伺,隨后出現(xiàn)的幾起案子冶匹,更是在濱河造成了極大的恐慌堂竟,老刑警劉巖屈雄,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異求晶,居然都是意外死亡炮车,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門记焊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逸月,“玉大人,你說我怎么就攤上這事遍膜⊥胗玻” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瓢颅,是天一觀的道長恩尾。 經(jīng)常有香客問我,道長挽懦,這世上最難降的妖魔是什么翰意? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮巾兆,結(jié)果婚禮上猎物,老公的妹妹穿的比我還像新娘。我一直安慰自己角塑,他們只是感情好蔫磨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著圃伶,像睡著了一般堤如。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窒朋,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天搀罢,我揣著相機(jī)與錄音,去河邊找鬼侥猩。 笑死榔至,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欺劳。 我是一名探鬼主播唧取,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铅鲤,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了枫弟?” 一聲冷哼從身側(cè)響起邢享,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淡诗,沒想到半個(gè)月后骇塘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韩容,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年款违,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙攻。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奠货,死狀恐怖介褥,靈堂內(nèi)的尸體忽然破棺而出座掘,到底是詐尸還是另有隱情,我是刑警寧澤柔滔,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布溢陪,位于F島的核電站,受9級(jí)特大地震影響睛廊,放射性物質(zhì)發(fā)生泄漏形真。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一超全、第九天 我趴在偏房一處隱蔽的房頂上張望咆霜。 院中可真熱鬧,春花似錦嘶朱、人聲如沸蛾坯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脉课。三九已至,卻和暖如春财异,著一層夾襖步出監(jiān)牢的瞬間倘零,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工戳寸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呈驶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓疫鹊,卻偏偏與公主長得像袖瞻,于是被迫代替她去往敵國和親跌穗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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