Quartz2D

1> Quartz2D簡(jiǎn)介

*? PPT簡(jiǎn)介

什么是Quartz2D?二維的繪圖引擎

什么是二維?平面

什么是引擎?經(jīng)包裝的函數(shù)庫(kù),方便開發(fā)者使用。也就是說(shuō)蘋果幫我們封裝了一套繪圖的函數(shù)庫(kù)

同時(shí)支持iOS和Mac系統(tǒng)什么意思?用Quartz2D寫的同一份代碼,既可以運(yùn)行在iphone上又可以運(yùn)行在mac上,可以跨平臺(tái)開發(fā)。

開發(fā)中比較常用的是截屏/裁剪/自定義UI控件。

Quartz2D在iOS開發(fā)中的價(jià)值就是自定義UI控件。

圖形上下文的數(shù)據(jù)類型和作用。

有多少種上下文。

自定義控件的步驟。

為什么要實(shí)現(xiàn)drawRect:方法,因?yàn)橹挥性赿rawRect:方法中才能獲取到上下文

2> Quartz2D繪圖演練

在哪畫? storyboard拖一個(gè)view,在這個(gè)view里面畫一些東西。

自定義view:需要繪圖,就必須重寫drawRect:方法

*? HMLineView:繪制線段 必須畫圖分析

drawRect:方法自動(dòng)生成,意味著什么?這個(gè)方法很重要。

1> 什么時(shí)候調(diào)用:視圖要顯示的時(shí)候,才會(huì)調(diào)用,viewDidLoad后才會(huì)調(diào)用,因?yàn)槟菚r(shí)候還沒顯示視圖。

2> 作用:用來(lái)繪圖

* 畫一條線

1> 獲取圖形上下文

CG:表示這個(gè)類在CoreGraphics框架里? Ref:引用

目前學(xué)的上下文都跟UIGraphics有關(guān),想獲取圖形上下文,首先敲UIGraphics。

2> 拼接路徑:一般開發(fā)中用貝塞爾路徑,里面封裝了很多東西,可以幫我畫一些基本的線段,矩形,圓等等。

創(chuàng)建貝塞爾路徑

起點(diǎn):moveToPoint

終點(diǎn):addLineToPoint

3> 把路徑添加到上下文

CGPath轉(zhuǎn)換:UIKit框架轉(zhuǎn)CoreGraphics直接CGPath就能轉(zhuǎn)

4> 把上下文渲染到視圖,圖形上下文本身不具備顯示功能。

PPT畫圖分析為什么要這樣做?首先獲取圖形上下文,然后描述路徑,把路徑添加到上下文,渲染到視圖,圖形上下文相當(dāng)于一個(gè)內(nèi)存緩存區(qū),在內(nèi)存里面操作是最快的,比直接在界面操作快多了。

* 在添加一根線

直接addLineToPoint,因?yàn)槁窂绞瞧唇拥?,默認(rèn)下一條線的起點(diǎn)是上一條線的終點(diǎn)。

* 畫兩跟不連接的線

1> 第二次畫的時(shí)候,重新設(shè)置起點(diǎn),然后畫線。一個(gè)路徑可以包含多條線段。

2> 新創(chuàng)建一個(gè)路徑,添加到上下文。開發(fā)中建議使用這種,比較容易控制每根線。

* 設(shè)置繪圖狀態(tài)

線段怎么加粗。

繪圖狀態(tài)調(diào)用順序:只要在渲染之前就好了,在渲染的時(shí)候才會(huì)去看繪圖的最終狀態(tài)。

* 畫曲線

PPT分析:3個(gè)點(diǎn),起點(diǎn),終點(diǎn),控制點(diǎn)。

*? HMShapeView:繪制圖形

* triangle三角形(畫圖分析)

* 關(guān)閉路徑closePath:從路徑的終點(diǎn)連接到起點(diǎn)

* 填充路徑CGContextFillPath:有了封閉的路徑就能填充。

* 設(shè)置填充顏色 [[UIColor blueColor] setFill];

* 設(shè)置描邊顏色 [[UIColor redColor] setStroke];

* 不顯示描邊顏色,為什么?沒有設(shè)置線寬

* 設(shè)置線寬,還是不顯示,為什么?因?yàn)槔L制路徑不對(duì)。

* 即填充又描邊CGContextDrawPath:kCGPathFillStroke。

* rectangle矩形

* circle圓:為什么傳入矩形,因?yàn)閳A內(nèi)切與矩形

* arc圓弧

PPT分析:

1> 圓弧屬于圓的一部分,因此先要有圓,才有弧。

2> 圓需要起點(diǎn)嗎?畫線需要,圓也不另外。

3> 起點(diǎn)在哪? 圓心右邊

4> 畫圓弧還需要起始角度,結(jié)束角度,方向,角度必須是弧度

* Quarter 1/4圓

* 畫個(gè)1/4圓弧,Stroke

* 填充路徑,F(xiàn)ill

* 必須有封閉路徑才能填充,沒有封閉路徑,系統(tǒng)會(huì)自動(dòng)關(guān)閉路徑,再去填充

* 畫線連接圓心,自動(dòng)關(guān)閉路徑。

2.1 基本圖形繪制:

先畫PPT在寫代碼

講解順序: 繪制線段(Line):繪制直線->在添加一條直線->繪制兩條直線(路徑填充、設(shè)置路徑屬性,顏色,線寬等)->曲線->分析

講解順序: 繪制圖形(Shape):繪制三角形(超人內(nèi)褲)->矩形->圓->圓弧->1/4圓

3>? 重繪-下載進(jìn)度條(setNeedsDisplay) 必須畫圖分析

* 分析有幾個(gè)控件:UISliderView,自定義view用來(lái)畫圖,UILabel

* 分析思路:滑動(dòng)UISliderView的時(shí)候,把UISliderView的值傳給自定義view,改變的顯示。

* 怎么監(jiān)聽UISliderView,valueChange事件

* 自定義view搞一個(gè)屬性接收滑動(dòng)的值

* 接下來(lái)先搞label,因?yàn)樗容^簡(jiǎn)單,做東西,先從簡(jiǎn)單的著手。

* 懶加載label,位置居中,文字居中

* label怎么顯示?重寫progress的set方法,有數(shù)據(jù)就展示在label上。

* 繪制圓弧,PPT分析,從哪開始畫圓弧。

* 每次轉(zhuǎn)多少°? 角度 = 進(jìn)度 * M_PI * 2

* startAngle = -M_PI_2

* endAngle = -M_PI_2 + 進(jìn)度 * M_PI * 2

* 不會(huì)及時(shí)更新視圖顯示?為什么,因?yàn)閐rawRect只會(huì)在視圖顯示的時(shí)候調(diào)用一次。

* 怎么重繪?

* 手動(dòng)調(diào)用drawRect方法,不行,因?yàn)槟阕约翰荒軇?chuàng)建上下文,必須系統(tǒng)調(diào)用來(lái)調(diào)用

* setNeedsDisplay:在view上做一個(gè)重繪的標(biāo)記,在下一次繪圖的周期來(lái)臨,就會(huì)先創(chuàng)建好上下文,然后自動(dòng)調(diào)用drawRect重繪。

4> 繪制餅圖

* PPT分析 -> 找規(guī)律 -> 得出startA,endA,angle的結(jié)論

* startA = endA angle = 比例 * 總度數(shù)360° endA = startA + angle

* angle = 自己 / 100.0 * 360

* 一個(gè)一個(gè)扇形畫

5> 繪制柱狀圖

* PPT分析 -> 找規(guī)律 -> 得出w,h,y,x的結(jié)論

* w = viewW / (2 * count - 1)

* h = viewH * 比例

6> UIKit封裝繪圖方法演練(不需要上下文)

6.0 繪制文本

6.1 繪制矩形

6.2 繪制圖像

6.4 圖像裁切 -> 指定裁切區(qū)域之后,所有繪圖信息都只顯示裁切區(qū)域內(nèi)

7> 模仿UIImageView/雪花(定時(shí)器)

8> 圖形上下文棧

9>? 矩陣變換

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Quartz2D 簡(jiǎn)介 Quartz2D是二維(平面)的繪圖引擎(經(jīng)包裝的函數(shù)庫(kù),方便開發(fā)者使用。也就是說(shuō)蘋果幫我...
    iOS_Cqlee閱讀 676評(píng)論 0 2
  • Quartz2D以及drawRect的重繪機(jī)制字?jǐn)?shù)1487 閱讀21 評(píng)論1 喜歡1一、什么是Quartz2D Q...
    PurpleWind閱讀 923評(píng)論 0 3
  • 一、Quartz2D基本概念 1、Quartz2D是一個(gè)二維圖形繪制引擎,支持iOS環(huán)境和Mac OS X環(huán)境 ...
    愛攝影的鏟屎官閱讀 371評(píng)論 0 1
  • 一、Quartz2D基本概念 1、Quartz2D是一個(gè)二維圖形繪制引擎,支持iOS環(huán)境和Mac OS X環(huán)境 2...
    空白Null閱讀 527評(píng)論 0 3
  • 興趣,顧名思義就是某些東西對(duì)你的吸引力,有的會(huì)長(zhǎng)久,而有的就是一時(shí)興起而已。比如現(xiàn)在都是手機(jī)電視普及的時(shí)代,不用培...
    一路奔行閱讀 306評(píng)論 1 3

友情鏈接更多精彩內(nèi)容