Динамичный UIImage для светлой и темной темы (оформления)
Есть следующий класс:
class ImageBundle {
let light: UIImage?
let dark: UIImage?
let adaptive: UIImage?
init(light: UIImage?, dark: UIImage?) {
self.light = light
self.dark = dark
if #available(iOS 13.0, *), let light = self.light, let dark = self.dark, let appDelegate = UIApplication.shared.delegate as? AppDelegate, let currentUserInterfaceStyle = appDelegate.window?.traitCollection.userInterfaceStyle {
self.adaptive = currentUserInterfaceStyle == .dark ? dark : light
self.adaptive?.imageAsset?.register(currentUserInterfaceStyle == .dark ? light : dark, with: UITraitCollection(traitsFrom: [.current, .init(userInterfaceStyle: currentUserInterfaceStyle == .dark ? .light : .dark)]))
} else {
adaptive = nil
}
}
convenience init(light: String, dark: String) {
self.init(light: UIImage(named: light), dark: UIImage(named: dark))
}
convenience init(single: UIImage) {
self.init(light: single, dark: single)
}
func currentImage() -> UIImage? {
if #available(iOS 13.0, *) {
if let adaptive = adaptive {
return adaptive
}
return light
} else {
return ThemeViewModel.shared.theme == .dark ? dark : light
}
}
}
Благодаря ему я получаю UIImage для текущей темы (светлой/темной). Конкретно в iOS 13 и 14 наблюдаются проблемы - adaptive независимо от темы всегда возвращает изображение для светлой темы. В iOS 15 работает все как задумано - изображение меняется в зависимости от темы. Не могу понять, я делаю что-то не так или это не работает в 13 и 14 iOS?