2017-04-07 74 views
0

簡單的我有兩個人的UIImageView圖標,它看起來像這樣:如何僅爲UIImage的非白色部分設置色調顏色?

enter image description here

,但是當我設置tintColor爲紅色,它看起來是這樣的:

enter image description here

有什麼辦法避免覆蓋每個非零元素像素?我需要在那裏顯示領帶。有一次我需要紅色的人,其他時間是綠色的。

該圖標是簡單的PNG文件。圓圈是UIImageView的簡單背景色。因此,的圖像部分不能爲zero-alpha

有沒有辦法達到這樣的效果沒有創建每種顏色的圖像?

+0

爲什麼你不使用兩個圖像? –

+0

因爲我需要動態改變顏色。有一次它可能是綠色的,其他時間是紅色或黑色的... –

+0

核心圖像。具體來說,使用GLSL編寫你自己的CIKernel。這其實很簡單。 – dfd

回答

1

這是相似的另一個想法我一直在與玩弄,所以我也多了幾分小提琴演奏......

這些3張開始:

enter image description hereenter image description hereenter image description here

,然後使用他們作爲.withRenderingMode(.alwaysTemplate)給予所需的顏色...然後通過CALayer將它們分層得到:

enter image description here

和「爆炸」的清晰視圖...

enter image description here

創建一個像這裏的「人」是100%透明 - 有效圖像中的「漏洞」。

將UIImageView的背景顏色設置爲「填充」顏色。

如果您不想將白色邊界框作爲圖像的一部分,您仍然可以使用圓形(例如CAShapeLayer)對其進行遮罩。

原始圖片: https://i.stack.imgur.com/eFrmB.png https://i.stack.imgur.com/2GNDX.png

+0

它看起來相當不錯;)但是......如果我需要改變圈子的背景怎麼辦?我究竟做了什麼?原因?需要顯示它被選中或沒有...沒有其他方式來做到這一點?目前+1 –

+0

您可以通過多層圖像和蒙版組合獲得「花哨」......會稍微玩一下,但不是沒有問題。另一種選擇是...因爲你的圖像非常簡單,從PNG切換到一對貝塞爾路徑+填充操作並不需要太多。也會很好地擴展。 – DonMag

+0

不... bezier路徑是錯誤的方式...它不僅是關於那個圖標... –

相關問題