2014-02-25 107 views
6

我有一個UIImageView其中我動態設置圖像(從一個URL)。圖像可能具有任意大小/寬高比。我將contentMode設置爲Aspect Fill,並將視圖的圖層clipsToBounds設置爲YES,並將其正確顯示。但是,我也想在圖像視圖下顯示陰影。當我在圖像視圖的圖層上設置陰影時,我需要將clipsToBounds設置爲NO以使陰影顯示,這會導致顯示圖像中出血部分。我怎樣才能保持圖像視圖大小不變(縱向填充)並同時啓用陰影?UIImageView陰影和縱橫填充

一個選項可能涉及創建圖形上下文並將圖像重新繪製到該上下文中,獲取具有所需長寬比的圖像並將該圖像設置爲我的圖像視圖圖像,但這是額外處理/浪費CPU/GPU和正常的世界時間(特別是如果我有大量的圖像視圖與大圖像)。

另一種選擇可能涉及在我的圖像視圖的相同大小下創建一個空白視圖,在我的超級視圖中將其插入到我的視圖下方,使用約束將其附加到我的視圖,並在該視圖的圖層上啓用陰影。這還涉及爲影子創建額外視圖。可能是比第一個更好/更有效的解決方案,但仍然是額外的工作(CPU方面)。

是否有任何選項不需要額外的工作,可以在我的條件下啓用陰影和方位擬合?

回答

1

一個解決方案,我認爲這是最佳的比你的第二個選項,

如果假設你想只顯示圖像,並沒有任何用戶交互上it.You可以使用兩個CALayer實例來實現它。

如果你想要用戶交互也在其上,然後一個UIView和一個CALayer

有兩個的CALayer instances->

  • 創建兩層。使用maskToBounds = YES存儲和顯示圖像的一個圖層。 您使用其contents property將圖像設置爲此圖層。
  • 然後添加上面的圖層作爲subLayer第二個CALayer你將添加陰影和clipToBounds =是。

以上是Apple建議的。在他們自己的話 - >

如果你想要一個陰影,但也想使用邊界掩蔽,你使用兩層而不是一個。將蒙版應用於包含內容的圖層,然後將該圖層嵌入到啓用了陰影效果的大小完全相同的第二個圖層中。

檢查此link。並尋找上述條款。

+0

不錯的解決方案,但我實際上需要互動。這將是一個拖動視圖的效果(拖動的視覺線索正在通過陰影「超過」其他視線) –