Swift(十一)CALayer

更新:2018.05.24

整理了一下demo:SwiftDemo


UIView是iOS系統(tǒng)中,界面元素的基礎,所有的界面元素都繼承自它,它的本身是由CoreAnimation來實現(xiàn)的。

  • UIView真正的繪圖部分,是由一個叫CALayer(Core Animation Layer)的類來管理的。
  • UIView本身更像是一個CALayer的管理器,訪問它跟繪圖和跟坐標有關的屬性,實際上內部都是在訪問它所包含的CALayer的相關屬性。

1.CALayer邊框

通過設置CALayer的borderWidthborderColor屬性,來設置視圖的邊框。

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.gray
        
      
        let v = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
        v.backgroundColor = UIColor.black
        
        v.layer.borderColor = UIColor.red.cgColor
        v.layer.borderWidth = 2
        view.addSubview(v)
    }

a. 上面代碼中,定義了一個視圖v,北京顏色為黑色,位置在(100,100)
寬高200。
b. 然后設置視圖的邊框顏色為紅色,邊框寬度為2。這里borderColor的值使用的是CGColorRef數(shù)據(jù)類型。不是UIColor。

2.CALayer陰影

通過CALayer的幾個陰影屬性來設置陰影效果。

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.gray
        
      
        let v = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
        v.backgroundColor = UIColor.black
        view.addSubview(v)
        
        v.layer.shadowColor = UIColor.red.cgColor
        v.layer.shadowOffset = CGSize(width: 10, height: 10)
        v.layer.shadowOpacity = 0.45
        v.layer.shadowRadius = 5.0
    }

a. 上面代碼中,還是上一個例子的代碼。

  • shadowColor: 陰影顏色。依然是CGColorRef數(shù)據(jù)類型。
  • shadowOffset: 陰影偏移度,代碼中是(10,10),即向下向右偏移10,默認值是(0,-3.0)。
  • shadowOpacity:設置陰影的透明度,默認值是0.0,取值范圍0~1。
  • shadowRadius: 設置陰影的模糊半徑,用來實現(xiàn)陰影的模糊效果,默認值是3.0。

3.CALayer圓角

通過設置 CALayer的cornerRadius屬性來設置圓角效果

class ThirdViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.gray
        
      
        let v = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
        v.backgroundColor = UIColor.black
        view.addSubview(v)
        
        v.layer.masksToBounds = true
        v.layer.cornerRadius = 100
    }

a. 還是之前的那個例子,添加了layermaskToBoundscornerRadius屬性。
b. 因為圓角效果只對視圖的背景顏色和層的邊框起作用,而不會對視圖中內容起作用,所以系統(tǒng)提供了maskToBounds屬性,如果將屬性設置為true,將會沿著圓角邊緣對視圖中的內容進行裁切。
c. cornerRadius代表的是圓角的半徑,假如將cornerRadius的值設置成正方形矩形邊長的一半,就會得到一個直徑是邊長的圓。

4. CALayer漸變

CALayer 和 UIView相似的是,CALayer也可以嵌套多個子CALayer層。從而實現(xiàn)多樣的效果。

如何實現(xiàn)漸變的效果呢?
layer中,添加一個CAGradientLayer漸變層,CAGradientLayer是用來生成兩種或多種顏色平滑的漸變效果的。

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.gray
        
      
        let v = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
        v.backgroundColor = UIColor.black
        view.addSubview(v)
       
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = v.bounds
        
        let fromColor = UIColor.green.cgColor
        let minColor = UIColor.red.cgColor
        let toColor = UIColor.blue.cgColor
        
        gradientLayer.colors = [fromColor,minColor,toColor]
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint(x: 1, y: 1)
        gradientLayer.locations = [0,0.3,1]
        v.layer.addSublayer(gradientLayer)
    }

a. OK,還是之前的那個例子,直接看下面的定義CAGradientLayer部分。
b.首先我們創(chuàng)建了一個CAGradientLayer實例gradientLayer,然后創(chuàng)建了開始顏色、過度顏色和結束顏色。然后設置grandientLayer的屬性。

  • colors: 放顏色值的數(shù)組,個數(shù)是不限制的,這里只做了三個,你也可以多放幾個試試。
    -startPoint: 顧名思義,開始位置,漸變的起點,值是0~1的CGPoint。
  • endPoint:結束位置,同上
  • locations:顏色漸變的行走軌跡,0.3表示中間顏色的漸變線位置。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,262評論 5 13
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,688評論 6 30
  • 轉載:http://www.itdecent.cn/p/32fcadd12108 每個UIView有一個伙伴稱為l...
    F麥子閱讀 6,567評論 0 13
  • 原文出處:http://blog.csdn.net/zhz459880251/article/details/50...
    F麥子閱讀 1,854評論 0 5
  • >復雜的組織都是專門化的 >Catharine R. Stimpson 到目前為止,我們已經(jīng)探討過`CALayer...
    夜空下最亮的亮點閱讀 1,216評論 0 2

友情鏈接更多精彩內容