我正在尝试使用 SwiftUI 动画。但是很难找到解决以下问题的方法。
我有一个视图(ExplicitAnimatedView
),它使用显式动画作为其逻辑。
struct ExplicitAnimatedView: View {
@State private var isAnimating: Bool = false
var body: some View {
Image(systemName: "arrow.up.circle")
.rotationEffect(Angle(degrees: isAnimating ? 360 : 0))
.font(.system(size: 80))
.foregroundColor(.white)
.padding(.all, 40)
.background(Color.blue)
.onAppear {
withAnimation(Animation.linear(duration: 3).repeatForever(autoreverses: false)) {
isAnimating = true
}
}
}
}
我ExplicitAnimatedView
在另一个使用隐式动画的视图中使用它。
struct TestView: View {
@State private var showLoading: Bool = false
var body: some View {
VStack {
if (showLoading) {
ExplicitAnimatedView()
.transition(.opacity)
}
Spacer()
Button("Toggle Loading") {
showLoading.toggle()
}
}
.animation(.linear)
}
}
问题是,显式动画ExplicitAnimatedView
不再有效。它的行为就像显式动画Animation.linear(duration: 3).repeatForever(autoreverses: false)
被外部视图的隐式动画替换/覆盖。.animation(.linear)
我在这里做错了什么,还是有办法完成这项工作?
注意:如果我将动画转换为ExplicitAnimatedView
隐式动画,则一切正常,没有任何问题。但这不是一个选项,因为ExplicitAnimatedView
它来自我无法修改的第三方库。