兩者的關(guān)系
在創(chuàng)建UIView對象時,UIView內(nèi)部會自動創(chuàng)建一個圖層(CALayer對象),而當(dāng)UIView對象需要顯示到屏幕上時,會調(diào)用drawRect:方法進(jìn)行繪圖,然后把內(nèi)容都繪制到圖層上,繪圖完畢,系統(tǒng)就會將圖層展示在屏幕上。
總得來說,UIView并不具有顯示的功能,是它內(nèi)部的層來完成顯示這一項(xiàng)工作,但VIew有響應(yīng)事件的功能。
CALayer的基本使用
通過操作UIView對象里的CALayer對象,我們可以很方便地調(diào)整UIView的一些外觀屬性。比如
- 陰影
- 邊框
- 圓角等等
UIView和UIImageView在操作CALayer上的區(qū)別
-
當(dāng)我們給UIImageView添加圓角時會發(fā)現(xiàn)圓角出來了但是顯示圖片的部分并沒有出現(xiàn)圓角
image而當(dāng)我們給layer的masksToBounds屬性設(shè)置為yes后才會顯示出我們要的效果
image 而UIView設(shè)置圓角是不需要將masksToBounds屬性設(shè)置為YES的
兩者的區(qū)別在于 —— 對View進(jìn)行圓角的設(shè)置只會作用在layer圖層上,而展示Image又是在另一個圖層上,它是以CGImage的形式存儲在layer的contents屬性上,而將masksToBounds設(shè)置為YES是為了去掉View的根層邊界外的內(nèi)容。
UIView和CALayer的選擇
- CALayer是定義在QuartzCore框架中的,CGImageRef,CGColorRef這兩種數(shù)據(jù)類型是定義在COreGraphics框架中的,而UIImage和UIColor是定義在UIKit框架的
- QuartzCore框架和COreGraphics框架是可以跨平臺使用的,在IOS和Mac OS X上都可以使用,但是UIKit只能在IOS中使用
- CALayer可以做出跟UIView一樣的效果,但是由于UIVIew繼承于UIResponder,可以處理事件的響應(yīng),而CALayer不可以

