Переходное представление, которое уже имеет некоторую анимацию, прерывает последнюю анимацию с помощью SwiftUI - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть представление с чем-то вроде этого:

struct SomeView: View {
  @State private var spin: Bool = false

  var body: some View {
    VStack(spacing: 16) {
      Circle()
        .frame(width: 64, height: 64)
        .rotationEffect(.degrees(spin ? 0 : -360), anchor: .center)
        .animation(Animation.timingCurve(0.4, 0.1, 0.5, 0.5, duration: 1).repeatForever(autoreverses: false))
    }
      .onDisappear { self.spin = false }
      .onAppear { self.spin = true }
  }
}

И это представление можно поменять на другое с помощью перехода:

Group {
  if showOtherView {
    OtherView().transition(AnyTransition.move(edge: .trailing).combined(with: .opacity))
  } else {
    SomeView().transition(AnyTransition.move(edge: .leading))
  }
}

Что происходит, так это то, что анимация перехода каким-то образом применяется к анимации вращения SomeView, поэтому счетчик не скользит (AnyTransition.move(edge: .leading)) с той же скоростью, что и остальная часть вида, но начинает скользить взад-вперед и виден даже поверх вновь представленного представления. Теперь, если я использую нескользящую анимацию, что-то вроде AnyTransition.scale(scale: 0.9), она работает просто отлично.

Как я понимаю, цикл анимации Circle каким-то образом применяется к анимации перехода, поэтому он запускается Цикл скольжения тоже, но я понятия не имею, как этого избежать ...

...