Как анимировать изменения темного режима в iOS?

Для анимации изменения темного режима в iOS можно использовать встроенную поддержку для обнаружения изменений trait в UIView или SwiftUI и применять плавные анимации во время перехода.

В UIKit:

Вы можете использовать метод traitCollectionDidChange для обнаружения, когда изменяется настройка темного режима, и применять анимацию для плавного перехода.

Вот пример с использованием UIView:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    
    if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
        UIView.animate(withDuration: 0.5) {
            self.view.backgroundColor = self.traitCollection.userInterfaceStyle == .dark ? .black : .white
        }
    }
}

В SwiftUI:

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

Вот пример, как анимировать изменения темного режима в SwiftUI:

struct ContentView: View {
    @Environment(\.colorScheme) var colorScheme
    
    var body: some View {
        VStack {
            Text("Привет, мир!")
                .foregroundColor(colorScheme == .dark ? .white : .black)
                .padding()
        }
        .background(colorScheme == .dark ? Color.black : Color.white)
        .animation(.easeInOut(duration: 0.5), value: colorScheme)
    }
}

В обоих подходах используются анимационные возможности UIView или SwiftUI для создания плавного перехода между светлым и темным режимами, когда меняется системная цветовая схема.