ฉันมีวัตถุโมเดลซึ่งมีคุณสมบัติที่เผยแพร่ 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 {..}
เพื่อสร้างเอฟเฟกต์ภาพเคลื่อนไหวได้ แต่ฉันไม่สามารถทราบวิธีทำจากโมเดลได้
.offset(x: state.displayMode.rawValue * 80, y:0).animation()
- person aheze   schedule 01.05.2021DispatchQueue.main.async { withAnimation { self.displayMode = newValue } }
ได้เหรอ? - person George_E   schedule 01.05.2021