当我在模型中使用 withAnimation 时,没有动画发生,为啥?
Posted
技术标签:
【中文标题】当我在模型中使用 withAnimation 时,没有动画发生,为啥?【英文标题】: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()
...
如果我在ViewModle
或View
中使用withAnimation
,那么动画会按预期发生,否则如果我在包含一些更改的Model
中使用withAnimation
,View
仍会反映这些更改,但没有动画发生。
【问题讨论】:
当你改变结构中的一个属性时,你会得到一个新的。我认为这就是您看不到任何动画的原因。mutating
函数是否仍然创建一个新函数?
【参考方案1】:
在视图模型中执行
func selectCard(card: SetGame.Card)
withAnimation // << here !!
model.selectCard(card: card)
【讨论】:
我知道这会起作用,但有时我需要一些状态更改动画,而另一些则不需要,所有这些更改都在调用selectCard
方法时发生,所以我想将这些更改包装在 @987654324 @
为此你必须使用.animation(..., value: <your state here>)
修饰符
value
应该是什么,@State
或 Property
,我试过这两个动画总是像值一样总是在变化,但实际上不是。
见这个例如***.com/a/63771023/12299030以上是关于当我在模型中使用 withAnimation 时,没有动画发生,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI视图状态更改使用withAnimation()方法无动画效果的解决
SwiftUI视图状态更改使用withAnimation()方法无动画效果的解决
当@Binding var 值发生变化时,有啥方法可以调用 withAnimation?
Swiftui 中的 Duration 参数 withAnimation(.linear)