圓角 cornerRadius
注意的是, 在設(shè)置 masksToBounds 屬性后,layer內(nèi)部的也都會(huì)被這個(gè)圓角給剪切巢寡。
邊框 borderWidth 和 borderColor
邊框是繪制在 layer 的 bounds 內(nèi)部的谓媒,即內(nèi)邊框。并且邊框會(huì)顯示在內(nèi)部所有子layer的上方薄风。
陰影
shadowOpacity (0~1.0f) 控制layer的透明度。 shadowColor 控制陰影顏色拍嵌,默認(rèn)是黑色遭赂。
shadowOffset (CGSize) 控制陰影的方向和距離。默認(rèn)是 {0,-3}, 即iOS上陰影是默認(rèn)向上的横辆。
shadowRadius 是陰影的擴(kuò)散半徑撇他。當(dāng)是0的時(shí)候,就是硬陰影狈蚤,值越大越是自然的軟陰影困肩。蘋果app傾向于軟陰影。
圖層的陰影處理得更智能一些脆侮,會(huì)檢查圖層的圖像锌畸,進(jìn)而根據(jù)其形狀繪制陰影。陰影是在 layer 的 bounds 之外的靖避,所以在指定 masksToBounds 后潭枣,這些陰影由于不在 bounds 內(nèi),都被裁切掉了幻捏。解決方法有二盆犁,一個(gè)是在這個(gè)layer 添加一個(gè)父 layer, 父layer 指定陰影屬性粘咖,而不指定 masksToBounds蚣抗。 另一種方法就是使用 shadowPath 來自己繪制好陰影的形狀。前一種方法瓮下,計(jì)算量大翰铡,可能會(huì)影響效率。對(duì)于 shadowPath, 是一個(gè) CGPathRef 類型的值讽坏,簡(jiǎn)單的使用 CoreGraphics 創(chuàng)建锭魔,復(fù)雜的使用 UIBezierPath 更方便。
遮罩
mask 屬性是一個(gè) CALayer 類型路呜。意思和2D游戲的掩碼位圖差不多迷捧,將不透明的部分取出來织咧,透明的部分過濾掉, 生成一個(gè)新的形狀漠秋。
縮放濾鏡
minificationFileter (縮小器) 和 magnificationFilter (放大器) 兩個(gè)屬性是用來指定顯示圖像的時(shí)候笙蒙,當(dāng)顯示的尺寸和實(shí)際圖片尺寸不一樣的時(shí)候,幾種圖片的像素處理算法庆锦。算法主要有三種:
- kCAFilterLinear (默認(rèn))
- kCAFilterNearest
- kCAFilterTrilinear
kCAFilterLInear 對(duì)許多像素進(jìn)行采樣計(jì)算出最終的一個(gè)像素值捅位,其結(jié)果是非常順滑的,但是在放大的時(shí)候搂抒,會(huì)有些模糊艇搀。
kCAFilterTrilinear 于 kCAFilterLinear 類似, 但是他會(huì)存儲(chǔ)許多尺寸的圖像求晶,在計(jì)算某個(gè)最終圖像時(shí)候焰雕,會(huì)使用相鄰的兩個(gè)尺寸的圖像進(jìn)行計(jì)算。比之芳杏,計(jì)算時(shí)效率好一些矩屁。
kCAFilterNearest 有點(diǎn)粗魯。當(dāng)圖像中沒有斜線的時(shí)候爵赵,這個(gè)非常有優(yōu)勢(shì)档插,放大后的圖像沒有一點(diǎn)模糊。
組透明
UIView 的 alpha亚再, CALayer 的 opacity 都是控制透明度的。它們會(huì)影響孩子們晨抡。比如當(dāng)設(shè)置 50% 的時(shí)候氛悬,layer 的每個(gè)像素點(diǎn),一半顯示自己的顏色耘柱,一半顯示孩子的layer如捅;而孩子也會(huì)一半顯示自己的顏色, 這樣一半的一半就是 25%。所以孩子的顏色會(huì)顯示 75% 调煎,這樣最終看起來孩子的alpha會(huì)是0.75, 看起來極不協(xié)調(diào)镜遣。
一個(gè)方法是在 info.plist 中設(shè)置 UIViewGroupOpacity 屬性,它會(huì)全局設(shè)置士袄,也會(huì)影響全局悲关。
另一個(gè)方法是設(shè)置 layer 的 shouldRasterise 屬性。它會(huì)將圖層和子圖層合成一個(gè)圖片娄柳。另外注意連帶設(shè)置好 rasterizationiScale 屬性和屏幕的內(nèi)容比例一樣寓辱。