更新:2018.05.24
整理了一下demo:SwiftDemo
UIView是iOS系統(tǒng)中,界面元素的基礎,所有的界面元素都繼承自它,它的本身是由CoreAnimation來實現(xiàn)的。
- UIView真正的繪圖部分,是由一個叫CALayer(Core Animation Layer)的類來管理的。
- UIView本身更像是一個CALayer的管理器,訪問它跟繪圖和跟坐標有關的屬性,實際上內部都是在訪問它所包含的CALayer的相關屬性。
1.CALayer邊框
通過設置CALayer的borderWidth和borderColor屬性,來設置視圖的邊框。
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. 還是之前的那個例子,添加了layer的maskToBounds和cornerRadius屬性。
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表示中間顏色的漸變線位置。
