2017-04-07 76 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路径是错误的方式...它不仅是关于那个图标... –

相关问题