我发现新的iOS 13 UIImage属性withTintColor(_:renderingMode:)
的行为令人难以理解。它的作用是什么,它与图像出现的上下文的色调颜色有什么关系?
答案 0 :(得分:1)
withTintColor
可能主要仅用于与符号图像一起使用的符号图像,这些图像始终被视为模板,并且没有自己的颜色。但是,能够将普通图像作为模板并为其赋予颜色也是很好的。
比方说,您正在绘制到自定义UIView的draw(_:)
方法中,或在UIImageView图形上下文中进行绘制。模板视图一直存在问题;您无法在此处访问其模板行为,因此无法着色它们。 withTintColor
解决了这个问题。
但是,毫无疑问,这些方法的行为非常奇怪。只要您说出withTintColor
,即使您说出.alwaysOriginal
,生成的图像也会被视为模板图像。因此,您的渲染模式将被忽略。
此外,在已经有tintColor
的上下文中,可以有两种竞争的色泽,即上下文和图像。解决这种竞争的方法很奇怪。从Xcode 11 beta 4开始,规则似乎是这样的:
对于大多数图像,除非您使用.alwaysTemplate
,否则图像的色调会获胜。因此,您可以说.alwaysOriginal
,现在您仍然有一个模板图像,但是您刚才分配给该图像的色调颜色将被忽略。
与符号图像相反,除非您使用.alwaysOriginal
,否则上下文色将获胜。
我不敢相信这种行为是故意的,并且我已经向Apple提交了错误报告。