Я бы хотел получить анимированный фон, который пересекает кучу изображений в SwiftUI.
Мне удалось получить массив цветов, который будет плавно перемалываться между ними, используя следующие фрагменты кода, но если я заменю массив цветов на массив изображений, тот же подход не сработает. Изображения заменены, но не анимированы. Тем не менее, и цвет, и изображение имеют какой-то тип View, верно?
Следующее работает:
struct ImageBackgroundView: View {
@State private var index = 0
private let colors:[Color] = [.red, .blue, .green, .orange, .pink, .black]
private let timer = Timer.publish(every: 5, on: .main, in: .common).autoconnect()
var body: some View {
colors[self.index]
.animation(.easeInOut(duration: 1))
.onReceive(timer) { _ in
print(self.index)
self.index += 1
if self.index > 5 { self.index = 0 }
}
}
, но если я заменю массив [Color] на массив типа [Images ], как показано ниже, изображения переходят, но кроссфейд не работает:
struct ImageBackgroundView: View {
@State private var index = 0
private let images = (1...8).map { Image("background\($0)") }
private let timer = Timer.publish(every: 5, on: .main, in: .common).autoconnect()
var body: some View {
images[self.index]
.animation(.easeInOut(duration: 1))
.onReceive(timer) { _ in
print(self.index)
self.index += 1
if self.index > 5 { self.index = 0 }
}
}
Кто-нибудь может пролить свет на то, почему это может иметь место? Является ли это просто ошибкой в SwiftUI в настоящее время?
Я добился аналогичного эффекта в предыдущем приложении, используя всевозможные вызовы addSubview, анимирующие непрозрачность наложенных представлений - всякого рода вещи, которые нам не нужны возиться с этим новым дивным миром SwiftUI, верно?