问题描述
我有一个模型对象,它有一个已发布的属性 displayMode,它通过来自服务器的事件异步更新。
class RoomState: NSObject,ObservableObject {
public enum displayMode: Int {
case modeA = 0
case modeB = 1
case modeC = 2
}
@Published var displayMode = displayMode.modeA
func processEventFromServer(newValue: displayMode) {
dispatchQueue.main.async {
self.displayMode = newValue
}
}
}
然后,我有一个视图,它通过根据值在特定位置放置一些图像来显示此模式。
struct RoomView: View {
@Observedobject var state: RoomState
var body: some View {
vstack {
...
Image(systemName: "something")
.offset(x: state.displayMode.rawValue * 80,y:0)
}
}
}
此代码工作正常,但我想在值更改时为运动设置动画。如果我更改 View 内代码块中的值,我可以使用 withAnimation {..}
创建动画效果,但我无法从模型中弄清楚如何去做。
解决方法
感谢@aheze,这就是答案。使用 .animation(),当 state.displayMode 改变时,这个 Image 视图总是动画。
struct RoomView: View {
@ObservedObject var state: RoomState
var body: some View {
VStack {
...
Image(systemName: "something")
.offset(x: state.displayMode.rawValue * 80,y:0)
.animation(.easeInOut)
}
}
}