[英]Prevent `CALayer` from dropping shadow set by its parent layer
最近我一直在玩陰影,一個特殊的案例讓我非常感興趣。 假設我有一個父CALayer
,它有三個橢圓形的子層放在一個堆棧中。 我將陰影應用到父層
containerLayer.shadowColor = UIColor.black.cgColor
containerLayer.shadowRadius = 10
containerLayer.shadowOpacity = 1
但是,如果我不想讓綠色橢圓形投影怎么辦? 我繼續實驗並將綠色圖層的fillColor
設置為nil
,以發現這實際上確實將其排除在父圖層上的組合陰影之外:
所以我有一個問題:是否可以同時防止某些圖層掉落陰影並保留圖層fillColor
或該圖層的任何子圖層?
我嘗試向現在不可見的綠色橢圓形圖層添加一個子圖層,但這會立即渲染其下方的陰影。 這是它的外觀:
橙色方塊是現在不可見的綠色橢圓的直接子層。
雖然這並不是真正發生的事情,但您可以想象視圖的圖層投射陰影。
這就是為什么如果我們有兩個子層,一個是填充路徑,一個是描邊路徑,我們會得到:
這也是為什么,如果視圖的圖層或背景不清楚,我們會得到這個:
因此,當我們將陰影應用到“根”層時,它和它的子層會被“展平”,並且陰影會應用到不清晰的部分。
對於您的示例,如果您想要紅色和藍色圖層上的陰影,而不是綠色圖層,您可以將陰影應用於各個子圖層:
你沒有在你的問題中說你是否希望藍層陰影出現在綠色上重疊。 如果沒有,有幾種方法可以“將它移到下面”......
首先,我們可以創建一個藍色層的副本——首先添加——並給那個層一個陰影而不是“頂部”藍色層:
有點難說,但我們現在有 4 個子層:
或者,我們可以在紅色層上設置陰影,在綠色或藍色上沒有陰影,然后將.shadowPath
添加到視圖的“根”層:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.