swiftUI如何禁用按钮2秒?

Posted

技术标签:

【中文标题】swiftUI如何禁用按钮2秒?【英文标题】:swiftUI how to disabled a button for 2sec? 【发布时间】:2020-05-31 08:06:22 【问题描述】:

我有一个错误,如果我在卡片翻转之前在动画之前单击按钮。我认为对我来说最好的方法是禁用按钮 2 秒,但我做了一些研究并没有找到任何东西!

struct CardBack: View 
    var body: some View 

      Image("back_card")
        .resizable()
        .aspectRatio(contentMode: .fit)
        .frame(width: 250)
    
  

struct ContentView: View 

   @State var flipped = false

   @State private var cardsFront = ["bigCard1", "bigCard2", "bigCard3", "bigCard4", "bigCard5" ]

   @State private var cardBack = "back_card"

    @State private var disablled = true

    var body: some View 
        VStack 
            Spacer()
            ZStack 

            Image(flipped ? self.cardsFront.randomElement()! : self.cardBack)
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 250)
              .rotation3DEffect(Angle(degrees: flipped ? 180 : 0 ), axis: (x: 0, y: 1, z: 0))
            

            Spacer()
            HStack 
                Button(action: 
                    withAnimation(.spring()) 
                        self.flipped.toggle()
                    
                    DispatchQueue.main.asyncAfter(deadline: .now() + 1) 
                        withAnimation(.spring()) 
                            self.flipped.toggle()
                        
                    

                ) 
                    Image("circle")
                        .renderingMode(.original)
                


                Button(action: 

                ) 
                    Image("plus")
                        .renderingMode(.original)
                

【问题讨论】:

【参考方案1】:

ios 13、斯威夫特 5

您可以将按钮最初设置为禁用,然后使用我在此处使用的相同逻辑启用它。

导入 SwiftUI

struct ContentView: View 
@State var changeColor = false

var body: some View 
    TextView(changeColor: $changeColor)



struct TextView: View 
@Binding var changeColor: Bool
var body: some View 

Text("Hello World")
    .foregroundColor(changeColor ? Color.black: Color.red)
    .onAppear 
        DispatchQueue.main.asyncAfter(deadline: .now() + 2) 
            self.changeColor.toggle()
        
    


您就快到了,您只需要在代码中使用 .appear 标记即可。

【讨论】:

以上是关于swiftUI如何禁用按钮2秒?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 2.0 在 macOS 上禁用窗口的缩放按钮

如何禁用 SwiftUI 的默认行为?

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

SwiftUI 列表禁用单元格按下

SwiftUI:基于 WebView 状态禁用/重新启用按钮

SwiftUI ActionSheet 禁用按钮