按钮上的 SwiftUI 动画图像

Posted

技术标签:

【中文标题】按钮上的 SwiftUI 动画图像【英文标题】:SwiftUI Animate Image on Button 【发布时间】:2020-01-24 11:58:13 【问题描述】:

使用 SwiftUI,我试图在用户单击按钮时显示动画图像并隐藏文本。这是我的代码:

@State private var showingActivity = false

var body: some View 
    Button(action: 
        self.showingActivity.toggle()
    )  
        HStack 
            if self.showingActivity 
                Image(systemName: "arrow.2.circlepath")
                    .font(.system(size: 29))
                    .rotationEffect(.degrees(self.showingActivity ? 360.0 : 0.0))
                    .animation(Animation.linear(duration: 1.5).repeatForever(autoreverses: false))
            
            else 
                Text("Continue")
            
        
    

Continue 文本出现,点击后消失(如预期),图像显示,但没有动画。任何想法我可能做错了什么。

谢谢

【问题讨论】:

【参考方案1】:

或者试试这个:

struct ImageView : View 

    @State private var showAction = false

    var body: some View 
        Image(systemName: "arrow.2.circlepath")
            .font(.system(size: 29))
            .rotationEffect(.degrees(self.showAction ? 360.0 : 0.0))
            .animation(self.showAction ? Animation.linear(duration: 1.5).repeatForever(autoreverses: false) : nil)
        .onAppear() 
            self.showAction = true
        
    


struct ContentView: View 
    @State private var showingActivity = false

    var body: some View 
        Button(action: 
            self.showingActivity.toggle()
        ) 
            HStack 
                if self.showingActivity 
                    ImageView()
                
                else 
                    Text("Continue")
                
            
        
    

【讨论】:

嘿,克里斯,你的方法是我已经实施的方法,并且很有效。感谢您的提示。【参考方案2】:

您可以使用.opacity 代替if...else 语句,在这种情况下旋转适用于图像。但是在画布中我仍然看到一些小故障,如果多次点击按钮但我没有在真实设备上尝试(行为可能有其他)。希望对您有所帮助:

struct AnimatableView: View 
    @State private var showingActivity = false

    var body: some View 
        Button(action: 
            self.showingActivity.toggle()
        ) 
            ZStack 
                Image(systemName: "arrow.2.circlepath")
                    .font(.system(size: 29))
                    .rotationEffect(.degrees(self.showingActivity ? 360.0 : 0.0))
                    .animation(Animation.linear(duration: 1.5).repeatForever(autoreverses: false))
                    .opacity(self.showingActivity ? 1 : 0)

                Text("Continue")
                    .opacity(self.showingActivity ? 0 : 1)

            

        
    

【讨论】:

以上是关于按钮上的 SwiftUI 动画图像的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 按钮点击重置 SpriteKit 动画 - 这是一个错误吗?

在 SwiftUi 中禁用默认按钮单击动画

在 SwiftUI 图像上重复动画

如何在 SwiftUI 中点击手势时放大缩小按钮动画?

SwiftUI:如何使用延迟在两个图像之间设置动画过渡?

SwiftUI - 从锚定到按钮框架的按钮点击动画到屏幕上