CALayer -視覺效果

視覺效果

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屏幕像素化得問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容