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