SwiftUI 在模拟器上损坏动画
SwiftUI broken animation on simulator
我一直在研究 SwiftUI 及其动画。下面是我在带有 scaleEffect 动画的 navigationView 中的圆圈代码
@State private var isAnimating = false
NavigationView{
VStack{
ZStack{
Circle()
.fill(Color.blue)
.shadow(radius: 15)
.frame(width: 150, height: 150, alignment: .center)
.scaleEffect(isAnimating ? 1.2 : 1)
.onAppear() {
withAnimation(Animation.easeInOut(duration: 1.2).repeatForever()){
self.isAnimating = true
}
}
}
.padding(.top, 140)
Spacer()
}
.edgesIgnoringSafeArea(.all)
}
我的预览显示了预期的动画:
但在模拟器上,动画完全不同:
这是 SwiftUI 的错误吗?我这里做错了什么?
这是一个解决方案。使用 Xcode 12.1 / iOS 14.1
测试
Circle()
.fill(Color.blue)
.shadow(radius: 15)
.frame(width: 150, height: 150, alignment: .center)
.scaleEffect(isAnimating ? 1.2 : 1)
.animation(Animation.easeInOut(duration: 1.2).repeatForever(), value: isAnimating)
.onAppear() {
self.isAnimating = true
}
注意:在任何奇怪的动画效果情况下,请尝试检查您的动画并将每个动画限制为仅应跟踪的状态的值。
我一直在研究 SwiftUI 及其动画。下面是我在带有 scaleEffect 动画的 navigationView 中的圆圈代码
@State private var isAnimating = false
NavigationView{
VStack{
ZStack{
Circle()
.fill(Color.blue)
.shadow(radius: 15)
.frame(width: 150, height: 150, alignment: .center)
.scaleEffect(isAnimating ? 1.2 : 1)
.onAppear() {
withAnimation(Animation.easeInOut(duration: 1.2).repeatForever()){
self.isAnimating = true
}
}
}
.padding(.top, 140)
Spacer()
}
.edgesIgnoringSafeArea(.all)
}
我的预览显示了预期的动画:
但在模拟器上,动画完全不同:
这是 SwiftUI 的错误吗?我这里做错了什么?
这是一个解决方案。使用 Xcode 12.1 / iOS 14.1
测试Circle()
.fill(Color.blue)
.shadow(radius: 15)
.frame(width: 150, height: 150, alignment: .center)
.scaleEffect(isAnimating ? 1.2 : 1)
.animation(Animation.easeInOut(duration: 1.2).repeatForever(), value: isAnimating)
.onAppear() {
self.isAnimating = true
}
注意:在任何奇怪的动画效果情况下,请尝试检查您的动画并将每个动画限制为仅应跟踪的状态的值。