如何从模型创建 SwiftUI 动画效果?

问题描述

我有一个模型对象,它有一个已发布的属性 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)
       }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...