【发布时间】:2021-01-10 08:05:45
【问题描述】:
在真实设备上测试时,我收到以下代码的Modifying state during view update, this will cause undefined behavior 问题。在 iPhone 11 上测试。在模拟器上,问题没有出现,代码按预期工作。
从what I can gather,从.onAppear内部修改状态就可以了。
这里发生了什么?为什么会出现此错误?
struct Clouds: View {
@State private var cloudOffset: CGFloat = 0.0
@State private var cloudOffset2: CGFloat = 0.0
@EnvironmentObject var mainData: MainData
var body: some View {
GeometryReader { geo in
if mainData.animateClouds {
Image("cloudsBlurry")
.resizable()
.scaledToFit()
.offset(x: self.cloudOffset, y: 0.0)
.onAppear {
let baseAnimation = Animation.linear(duration: 30)
let repeated = baseAnimation.repeatForever(autoreverses: true)
withAnimation(repeated) {
self.cloudOffset += geo.size.width * 0.50 //Error here
}
}
Image("cloudsBlurry3")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(height: geo.size.height * 2)
.offset(x: self.cloudOffset2, y: 0.0)
.onAppear {
let baseAnimation = Animation.linear(duration: 30)
let repeated = baseAnimation.repeatForever(autoreverses: true)
self.cloudOffset2 = -geo.size.width //Error here
withAnimation(repeated) {
self.cloudOffset2 += geo.size.width * 0.50 //Error here
}
}
} else {
Image("cloudsBlurry")
.resizable()
.scaledToFit()
.offset(x: 0.0, y: 0.0)
}
}
}
}
【问题讨论】: