如何在 SwiftUI 中为 Start->Max->Start 设置动画?

Posted

技术标签:

【中文标题】如何在 SwiftUI 中为 Start->Max->Start 设置动画?【英文标题】:How to animate Start->Max->Start in SwiftUI? 【发布时间】:2019-07-15 13:46:17 【问题描述】:

所以我想在 SwiftUI 中为图像设置动画:在用户点击它后,图像应该以彩色图高亮(红色或绿色,以指示用户是否点击了正确的)。但几秒钟后它应该会恢复正常 - 也就是它在开始时的样子。

我也尝试了make a custom highlight button,这也可以,但它看起来不会动画......

目前我使用ZStack,如果用户点击它,它会为Color 叠加动画,但我无法完成或类似的事情,可以吗?如何在没有用户交互的情况下“撤消”动画?

@State var redAlpha = 0.0

var badImg: some View
    ZStack
        Image(badImgName)
        .resizable()
        .scaledToFit()
        Button(action: 
            withAnimation 
                self.redAlpha = 0.5
            
        ) 
            Color.clear
        
        Color.red.opacity(self.redAlpha)  //<--overlay
    

【问题讨论】:

【参考方案1】:

这就是您可以在延迟一段时间后为视图更改设置动画的方式。 您也可以将按钮更改为 .tapAction

       ZStack 
            Image(badImgName)
                .resizable()
                .scaledToFit()
            Button(action: 
                withAnimation 
                    self.redAlpha = 0.5
                
                DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) 
                    withAnimation self.redAlpha = 0.0 
                
            ) 
                Color.clear
            

            Color.red.opacity(self.redAlpha)  //<--overlay
        

你可能需要在视图出现或消失时调用动画,使用 .onAppear .onDisappear 很容易做到

【讨论】:

感谢 m8,也想到了DispatchQueue,但我想.. idk.. 似乎有点 hack-y....whatevs.. 工作正常!谢谢^^ 我也试过.tapAction...,但由于某种原因它不会动画..这是预期的行为还是测试错误? .-.

以上是关于如何在 SwiftUI 中为 Start->Max->Start 设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中为列表创建标题?

如何在按钮单击时在 SwiftUI 中为 TextField 设置文本

如何在swift / SwiftUI中为滑动手势设置菜单栏图标的操作

如何在 SwiftUI 中为 WKWebView 创建浏览器选项卡

如何在 SwiftUI 中为按下时的导航链接设置动画?

如何在 swiftui 中为子视图设置私有状态变量?