簡體   English   中英

防止 `CALayer` 丟棄其父層設置的陰影

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM