首先,这里有一段重现该问题的代码:
import SwiftUI
struct CustomAnimation: ViewModifier {
@State private var isAnimated: Bool = false
func body(content: Content) -> some View {
content
.phaseAnimator([true, false], trigger: self.isAnimated) { view, phase in
view
.scaleEffect(phase ? 1 : 1.2)
}
.onTapGesture {
self.isAnimated.toggle()
}
}
}
#Preview {
@Previewable @State var isPresented: Bool = true
VStack {
Button {
isPresented = true
} label: {
Text("show sheet")
}
}
.sheet(isPresented: $isPresented) {
VStack {
Spacer()
Text("my animated text")
.modifier(CustomAnimation())
}
}
}
问题是,当我将工作表向上拖动时,放置在屏幕底部并带有间隔的动画文本会抖动(并回到原来的位置),此时视图至少已动画过一次。
仅当动画视图粘在屏幕底部(例如,使用间隔物)并且仅在动画之后时,才会出现此问题。
我曾尝试使用仪器挂钩进行调试,但我对此还不熟悉,不太了解如何获取信息。
这个问题不仅在设备上构建,在预览中也会出现。我注意到,如果我将应用置于后台,动画就像没有发生一样,问题也消失了,直到我触发另一个动画。