我有一个 SwiftUI 应用,其中有一朵云在屏幕上缓慢移动,然后重置到其起始位置并无限地再次开始动画。
我使用以下代码完成此操作:
import SwiftUI
struct Clouds {
@State private var xOffset: CGFloat = 0.0
@State private var yOffset: CGFloat = 0.0
var body: some View {
Image("cloud")
.resizable()
.scaledToFit()
.aspectRatio(contentMode: .fit)
.frame(height: 200.0)
.offset(x: xOffset, y: yOffset)
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
yOffset = MainData.screenHeight * CGFloat.random(in: 0...1)
withAnimation(Animation.linear(duration: 80).repeatForever(autoreverses: false)){
xOffset = MainData.screenWidth
}
}
}
}
}
期望的行为:当应用被发送到后台时,云应该停止移动——当应用被带到前台时,云应该从哪里恢复它的移动它停止了。
实际行为:当应用发送到后台时,云会继续动画。动画完成,然后云保持在其起始位置,直到应用程序被带到前台。
问题:如何才能让动画在应用发送到后台时暂停,并在应用进入前台时恢复?
谢谢!
答案 0 :(得分:0)
作为一种解决方法,我决定通过 SpriteKit 而不是 SwiftUI 来渲染云。默认情况下,SpriteKit 具有所需的行为:当应用程序离开前台时,云停止动画,当应用程序返回前台时,云从相同位置开始动画。
如果其他人可以回答 SwiftUI 的原始问题,那就太好了——所以我不会接受我自己的答案。