ios - swiftui 的 withAnimation 是如何工作的?
问题描述
以下是所有相关文件,它是开发 swiftui 项目的 MVVM 模式。
// ContentView.swift
import SwiftUI
struct ContentView: View {
@ObservedObject var vm: ViewModel
var body: some View {
Rectangle().fill(Color.yellow).frame(width: 200, height: CGFloat(vm.model.height))
Button("animate") {
self.vm.changeHeight()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(vm: ViewModel())
}
}
// model.swift
import SwiftUI
import Foundation
struct Model {
var height = 100
var width = 100
mutating func changeHeight() {
withAnimation {
height = 300
}
}
}
//ViewModel.swift
import Foundation
class ViewModel: ObservableObject {
@Published var model = Model()
func changeHeight() {
model.changeHeight()
}
}
单击按钮时,高度立即更改,没有动画。如果我withAnimation
在 viewModel 或视图中使用,那么更改是动画的,为什么?
解决方案
推荐阅读
- python - 如果它不在孩子中,我如何从父母中附加一些东西?
- angular - 角业力测试问题
- php - Recursive button id in jquery
- mqtt - 使用 MQTT.js 和 Mosquitto 时丢失 MQTT 消息
- .net - 如何使用 Edge 启动我的本地 IIS Web 应用程序?
- python - 如何从字典值返回对象?
- typescript - Typescript 数组实现的接口
- angular - 如何使用 rxjs 的过滤器运算符?
- r - 将 `NA` 扩展为填充有分组变量的多行
- sql-server - 用于 XML 的 T-SQL。如何获取每个 Measure 的所有 element_ID(示例数据)