首页 > 解决方案 > 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 或视图中使用,那么更改是动画的,为什么?

标签: iosswiftswiftui

解决方案


推荐阅读