У меня есть представление с чем-то вроде этого:
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
каким-то образом применяется к анимации перехода, поэтому он запускается Цикл скольжения тоже, но я понятия не имею, как этого избежать ...