UIView和CALayer的那些事兒

  • 萬劍歸宗,UIView和CALayer都是的祖宗都是NSObjet。

繼承結構

  • UIView的繼承結構爲: UIResponder : NSObject。
    • UIResponder是用來響應事件的,也就是UIView可以響應用戶事件
  • CALayer的繼承結構爲: NSObject
    • 直接從 NSObject繼承,因爲缺少了UIResponder類,所以CALayer悲催的不能響應任何用戶事件。
  • UIView是視圖的基類,UIViewController是視圖控制器的基類,UIResponder是表示一個可以在屏幕上響應觸摸事件的對象;

所屬框架

  • UIView是在 /System/Library/Frameworks/UIKit.framework中定義的

    • UIKit主要是用來構建用戶界面,並且是可以響應事件的(源於UIView的父類UIResponder)
    • UIView是用來顯示內容的,可以處理用戶事件
  • CALayer是在/System/Library/Frameworks/QuartzCore.framework定義的。

    • CALayer作爲一個低級的,可以承載繪製內容的底層對象出現在該框架中。
    • CALayer是用來繪製內容的,對內容進行動畫處理依賴與UIView來進行顯示,不能處理用戶事件。

作用機制

  • 當UIView需要顯示的時候,會調用drawRect:方法進行繪圖,並且會將所有內容繪製在自己的圖層上(CALayer上),系統將圖層拷貝到屏幕上,完成UIView的顯示。

    • 通過操作這個CALayer對象,可以很方便的調整UIView的一些界面屬性,比如:陰影,圓角大小,旋轉等等。
      
      viewT.layer.cornerRadius = 10;//設置半徑
      viewT.layer.borderWidth = 10;//設置邊框的寬度,當然可以不要
      viewT.layer.borderColor = [[UIColor redColor] CGColor];//設置邊框的顏色
      viewT.layer.masksToBounds = YES;//設爲NO去試試
  • 所以UIView相比CALayer最大區別是UIView可以響應用戶事件,而CALayer不可以。UIView側重於對顯示內容的管理,CALayer側重於對內容的繪製。

  • UIView和CALayer是相互依賴的關係。UIView依賴與CALayer提供的內容,CALayer依賴UIView提供的容器來顯示繪製的內容。歸根到底CALayer是這一切的基礎,如果沒有CALayer,UIView自身也不會存在,UIView是一個特殊的CALayer實現,添加了響應事件的能力。

  • UIView來自CALayer,高於CALayer,是CALayer的高層實現與封裝。UIView的所有特性來源於CALayer支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章