【问题标题】:When I use withAnimation in the Model, no animation happens, why?当我在模型中使用 withAnimation 时,没有动画发生,为什么?
【发布时间】:2020-09-16 06:41:33
【问题描述】:

这是我的ViewModel

import SwiftUI

class SetGameVM: ObservableObject {
    @Published var model: SetGame = SetGame()
    
    var cards: Array<SetGame.Card> {
        model.cards
    }
   
    func selectCard(card: SetGame.Card) {
        model.selectCard(card: card)
    }
    
    func dealCards() {
        model.dealMoreCards()
    }

    func reset() {
        model = SetGame()
    }
}

Model

import SwiftUI

struct SetGame {
    var cards: Array<Card>

 mutating func selectCard(card: Card) -> Bool {
        ...
       withAnimation {
        dealMoreCards()
       }
       ...
   }
}

如果我在ViewModleView 中使用withAnimation,那么动画会按预期发生,否则如果我在包含一些更改的Model 中使用withAnimationView 仍会反映这些更改,但没有动画发生。

【问题讨论】:

  • 当你改变结构中的一个属性时,你会得到一个新的。我认为这就是您看不到任何动画的原因。
  • mutating 函数是否仍然创建一个新函数?

标签: ios swift mvvm swiftui


【解决方案1】:

在视图模型中执行

func selectCard(card: SetGame.Card) {
    withAnimation {                       // << here !!
       model.selectCard(card: card)
    }
}

【讨论】:

  • 我知道这会起作用,但有时我需要一些状态更改动画,而另一些则不需要,所有这些更改都在调用 selectCard 方法时发生,所以我想将这些更改包装在 @987654324 @
  • 为此你必须使用.animation(..., value: &lt;your state here&gt;)修饰符
  • value 应该是什么,@StateProperty,我试过这两个动画总是像值一样总是在变化,但实际上不是。
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多