仅使用 .animation 修饰符的显式动画不起作用

Posted

技术标签:

【中文标题】仅使用 .animation 修饰符的显式动画不起作用【英文标题】:Explicit animations using only an .animation modifier don't work 【发布时间】:2019-10-16 22:53:16 【问题描述】:

我正在使用 SwiftUI,我注意到来自 this Apple tutorial 的代码无法正常工作。我想为scaleEffect 应用动画,但不为rotationEffect 应用动画,但在提到的教程中这样做是行不通的——当添加.animation(nil) 时,根本没有动画。这是一个错误还是我做错了什么?

struct ContentView: View 
      @State private var showDetail = false

    var body: some View 
        Button(action: 
            self.showDetail.toggle()
        ) 
            Image(systemName: "chevron.right.circle")
                .imageScale(.large)
                .rotationEffect(.degrees(showDetail ? 90 : 0))
                .animation(nil)
                .scaleEffect(showDetail ? 1.5 : 1)
                .padding()
                .animation(.easeInOut(duration: 2))
        
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    

【问题讨论】:

【参考方案1】:

只需将.animation放在.rotationEffect之前,它不会应用到效果上

Image(systemName: "chevron.right.circle")
                .imageScale(.large)
                .scaleEffect(showDetail ? 1.5 : 1)
                .padding()
                .animation(.easeInOut(duration: 2))
                .rotationEffect(.degrees(showDetail ? 90 : 0))

【讨论】:

是的,这应该有效,但它没有!正在播放 scaleEffectrotationEffect 的动画。我不确定是否存在错误或我的 Xcode 已损坏。 @czater 我检查了 Xcode 11.2 Beta 2,它工作正常,缩放效果是动画的,而旋转不是 是的,这在 Xcode 11.2 Beta 2 中运行得非常好! 好的,rotationEffect 可以工作,但是当你将其更改为position 时,它就不再工作了....position(showDetail ? CGPoint(x: 100, y: 100) : CGPoint(x: 200, y: 200)) 这很奇怪:/ 我有同样的问题,在我的情况下,我使用的是 xcode 11.2.1,而 .animation 修饰符在 ios 13.2 上不起作用。在 IOS 13.1 上运行时,我的动画效果很好。

以上是关于仅使用 .animation 修饰符的显式动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章

仅标头模板的显式实例化声明(外部模板)

SwiftUI:动画更改依赖于@ObjectBinding

Scala 中的显式类型转换

运算符重载中的显式构造?

智能转换与 KOTLIN 中的显式转换有何不同

显式实例化模板类的显式实例化模板方法