iOS 13 UIImage`withTintColor`如何工作?

时间:2019-07-26 18:18:00

标签: ios uiimage ios13

我发现新的iOS 13 UIImage属性withTintColor(_:renderingMode:)的行为令人难以理解。它的作用是什么,它与图像出现的上下文的色调颜色有什么关系?

1 个答案:

答案 0 :(得分:1)

withTintColor可能主要仅用于与符号图像一起使用的符号图像,这些图像始终被视为模板,并且没有自己的颜色。但是,能够将普通图像作为模板并为其赋予颜色也是很好的。

比方说,您正在绘制到自定义UIView的draw(_:)方法中,或在UIImageView图形上下文中进行绘制。模板视图一直存在问题;您无法在此处访问其模板行为,因此无法着色它们。 withTintColor解决了这个问题。

但是,毫无疑问,这些方法的行为非常奇怪。只要您说出withTintColor,即使您说出.alwaysOriginal,生成的图像也会被视为模板图像。因此,您的渲染模式将被忽略。

此外,在已经有tintColor的上下文中,可以有两种竞争的色泽,即上下文和图像。解决这种竞争的方法很奇怪。从Xcode 11 beta 4开始,规则似乎是这样的:

  • 对于大多数图像,除非您使用.alwaysTemplate,否则图像的色调会获胜。因此,您可以说.alwaysOriginal,现在您仍然有一个模板图像,但是您刚才分配给该图像的色调颜色将被忽略。

  • 与符号图像相反,除非您使用.alwaysOriginal,否则上下文色将获胜。

我不敢相信这种行为是故意的,并且我已经向Apple提交了错误报告。