У меня есть простое представление SwiftUI, в котором анимация выполняется правильно:
struct DemoView: View {
@State private var isAnimating = false
var body: some View {
Text("Hello")
.rotationEffect(.degrees(isAnimating ? 360 : 0))
.animation(.smooth.repeatForever(), value: isAnimating)
.onAppear(perform: {
isAnimating = true
})
}
}
Но как только я завернул его содержимое или встроил в TabView, анимация перестает работать (не выполняется):
struct DemoView: View {
@State private var isAnimating = false
var body: some View {
TabView {
Text("Hello")
.rotationEffect(.degrees(isAnimating ? 360 : 0))
.animation(.smooth.repeatForever(), value: isAnimating)
.onAppear(perform: {
isAnimating = true
})
}
}
}
Примечание. Я тестирую это на проекте WatchOS.





Почему-то при тестировании на симуляторе часов анимация не выполняется. Но я заметил, что использование явной анимации работает, такое ощущение, что это баг SwiftUI.
struct DemoView: View {
@State private var isAnimating = false
var body: some View {
TabView {
Text("Hello")
.rotationEffect(.degrees(isAnimating ? 360 : 0))
.onAppear(perform: {
withAnimation(.smooth.repeatForever()) {
isAnimating = true
}
})
}
}
}
Примечание. Мой пользовательский интерфейс и наблюдаемые данные более сложны, но работает тот же подход.