Как обрабатывать изображение содержимого черного цвета для темного режима в моем приложении iOS?

Я полностью поддерживаю iOS dark mode в своем приложении для iPad. Проблема возникает только в темном режиме, когда изображение логотипа бренда имеет черный цвет. Как правило, все логотипы бренда никогда не окрашиваются в белый цвет, поэтому для светового режима нет проблем.

Вот снимки экрана для обоих режимов:

Логотип бренда Adura в светлом режиме

введите здесь описание изображения

Логотип бренда Adura в темном режиме

введите здесь описание изображения

Как разместить такие логотипы? У меня было несколько предложений установить фоновый вид за логотипом серым цветом, но опять же, у некоторых брендов может быть логотип серого цвета.


person NSPratik    schedule 28.02.2020    source источник
comment
Меняю изображение на такое же изображение белого цвета. Используйте 2 изображения для темной и светлой темы.   -  person Picode    schedule 28.02.2020
comment
Эти логотипы поступают на сервер в качестве содержимого, поэтому они не добавляются в пакет проекта приложения. В противном случае я мог бы добавить два отдельных изображения для светлого и темного режима в изображения.   -  person NSPratik    schedule 28.02.2020
comment
Затем вам нужно добавить дополнительное изображение на свой сервер и загрузить правильное изображение на основе выбранной темы. Вы можете сделать это с помощью расширения в UIView: var isDarkMode : Bool { return self.traitCollection.userInterfaceStyle == .dark }   -  person inexcitus    schedule 28.02.2020
comment
Или вы можете попробовать инвертировать цвета изображения с помощью Core Image framework.   -  person andrewbuilder    schedule 28.02.2020


Ответы (2)


Вот пример кода:

// Somewhere where you set UIImage for UIImageView
let imageView = UIImage()
let image = UIImage(named: "img.png")?.withRenderingMode(.alwaysTemplate)
imageView.image = image
imageView.tintColor = .black
...

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if traitCollection.userInterfaceStyle == .dark {
            imageView.tintColor = .red
        }
        else {
            imageView.tintColor = .black
        }
    }
person Ku6ep    schedule 28.02.2020

Это сработало для меня

  1. Шаг 1. Создайте набор изображений в assets.xassets, например  введите описание изображения здесь

  2. Шаг 2 - Выберите изображение, выберите вот так

введите описание изображения здесь

  1. Шаги 3. Измените внешний вид на «Любой», «Светлый», «Темный», как это.  введите описание изображения здесь

введите описание изображения здесь

  1. Добавьте свои изображения для любого светлого и темного режима, подобного этому, и используйте это изображение там, где оно вам нужно.

введите описание изображения здесь

person Quick learner    schedule 16.07.2021