視覺效果
conrnerRadius
該屬性控制著圖層角的曲率,這個曲率值 只影響背景顏色 而不影響背景圖片或是子圖層。如果把masksToBounds設置成YES的話,圖層里面的所有東西都會被截取。
borderWidth和borderColor
邊框是跟著圖層的邊界來繪制的,而不是圖層的內容。
陰影
陰影往往可以圖層深度暗示的效果,來強調正在顯示的圖層和優先級,有時只是單純的裝飾目的。
設置圖層的shadowOpacity屬性,取值從0~1。同時要改動陰影的表現可以使用另外三個屬性:shadowColor,shadowOffset,shadowRadius。
shadowColor:控制著陰影的顏色,他的類型是CGColorRef。
shadowOffset: 控制著陰影的方向和距離,它是一個CGSize的值,寬度控制陰影的橫向唯一,高度控制著縱向位移。默認值是{0,-3},即默認就有個相對于Y軸的3個點的向上位移。注:向上位移的原因是因為Core Animation是先在Mac OS上面世的,其與iOS的Y軸是顛倒的,在Mac上陰影默認是向下的。
shadowRadius屬性控制著陰影的模糊度,當它的值是0的時候,陰影就和視圖一樣有一個非常確定的邊界線。當值越來越大的時候,邊界線看上去就會越來越模糊和自然??刂瓶v深關系可以使用這個屬性來實現。
陰影的裁剪
圖層的陰影繼承自內容的外形,而不是根據邊界和角半徑來確定的,為了計算出陰影的形狀,Core Animation會將寄宿圖(包括子視圖)考慮在內,來創建一個陰影。
問題:當開啟了maskToBounds以后,陰影也被裁剪掉了,如何解決,把該圖層裁剪,再在其外層套一個圖層,對新增的圖層做陰影。
陰影路徑:shadowPath屬性
出現的原因:圖層的陰影是從圖層內容的形狀繼承而來,但實時計算陰影也是一個非常消耗資源的,尤其是圖層有多個子圖層。所以如果你事先知道你的陰影形狀,可以通過指定一個shadowPath來提高性能。
圖層蒙板:Mask屬性
作用:用來裁剪特定樣式圖形。mask圖層定義了父圖層的部分可見區域,其他部分全部隱藏。
蒙版圖不局限于靜態圖,可以通過代碼甚至是動畫實時生成。
拉伸過濾:minificationFilter
拉伸過濾算法:
組透明: shouldRasterize
UIView的alpha和opacity這兩個屬性都是會影響子層級的。
在正常的透明度表現中,圖層的每個像素都會一半顯示自己的顏色,另一半顯示圖層下面的顏色。但如果圖層包含一個同樣顯示50%透明的子圖層時,你所看到的視圖,50%來自子視圖,25%來自圖層本身的顏色,另外的25%來自背景。
如果想讓整個圖層樹像一個整體一樣的透明效果?<p>
方法1:
可以在info.plist文件中的UIViewGroupOpacity為YES來實現,但會影響整個APP。
方法2:
可以設置CALayer的一個叫做shouldRasterize屬性來實現組透明的效果,如果它被設置為YES,在應用透明度之前,圖層及其子圖層都會被整合成一個整體的圖片,這樣就沒有透明度混合的問題了。
使用了shouldRasterize屬性,要確保設置了rasterizationScale屬性去匹配屏幕,以防止Retina屏幕像素化得問題。