0

我正在尝试使用 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它来自我无法修改的第三方库。

4

0 回答 0