Swift 3: UIImage при настройке на изображение шаблона и изменен цвет оттенка не показывает изображение

В Swift 3, когда я пытаюсь программно изменить цвет изображения, загруженного из ресурсов, вот так:

let imageView = UIImageView()
let image = UIImage(named: "imageFromAssets")?.withRenderingMode(.alwaysTemplate)
imageView.contentMode = .scaleAspectFit
imageView.tintColor = GREEN_UICOLOR // Change to custom green color
imageView.image = image

Изображение отображается в виде квадратного блока ниже:

Template image with green tint that does not work

Однако самое смешное, что это не всегда происходит. С некоторыми другими изображениями в активах это работает и меняет оттенок на зеленый:

Template image with green tint that works

Почему здесь противоречивое поведение? И вообще, как мне добавить шаблонное изображение в ресурсы и иметь возможность программно изменить его цвет? Я понимаю, что когда я не изменяю изображение на шаблонное изображение, оно работает, но я не могу этого сделать, потому что хочу изменить оттенок изображения.

Ответ 1

Для изображений шаблонов фон должен быть прозрачным, а не белым.

Ответ 2

Изображения шаблонов работают с использованием свойства непрозрачности изображения.

Если у вас есть изображение с прозрачным фоном, прозрачный фон остается прозрачным, а ВСЕ остальная часть изображения изменяется на крошечный цвет.

Если ваш образ не имеет прозрачного фона. Скажем, он имеет белый фон. Затем все изображение будет изменено на цвет оттенка (как вы видите в своем примере).

Чтобы исправить это, вам нужно предоставить этому изображению прозрачный фон.

Также стоит отметить, что вам не нужен этот код. Если вы используете изображение только в режиме шаблона, просто выберите режим рендеринга в каталоге активов.