SwiftUI Пусть вид исчезнет автоматически - PullRequest
0 голосов
/ 23 марта 2020

У меня есть вид, который запускается нажатием кнопки. Похоже, все хорошо. Теперь я хочу, чтобы представление снова автоматически исчезало через несколько секунд.

Вид должен исчезнуть автоматически без повторного нажатия кнопки.

Ниже моего тестового проекта

import SwiftUI  

struct ContentView: View {  
  @State private var presentClipboardView = false  
  @State private var scale: CGFloat = 1.0  


  var body: some View {  
  VStack{  
  Button(action: {  
  let pasteboard = UIPasteboard()  
  pasteboard.string = "http://I_AM_A_URL.com"  

  withAnimation(.easeInOut(duration: 2)) {  
  self.presentClipboardView.toggle()  
  }  
  }, label: {  
  HStack {  
  Image(systemName: "list.dash")  
  .padding(.trailing)  
  VStack(alignment: .leading) {  
  Text("Open URL")  
  .font(.headline)  
  }  

  Spacer()  
  }  
  }  
  )  
  if(self.presentClipboardView){  
  LabelView()  
  }  
  }  

  }  
}  

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

struct LabelView: View {  
  var body: some View {  
  Text("URL copied to clipboard!")  
  .padding(10)  
  .font(.title)  
  .foregroundColor(.white)  
  .background(RoundedRectangle(cornerRadius: 8).fill(Color.green).shadow(color: .gray, radius: 3))  
  }  
}  

Ответы [ 2 ]

1 голос
/ 23 марта 2020

попробуем

import SwiftUI

struct ContentView: View {
    @State var flag = false
    let time = 3.0
    var body: some View {
        VStack {
            if flag {
                DetailView(flag: $flag, showTime: time)
            }
            Button(action: {
                self.flag.toggle()
            }) {
                Text("show for \(time.description) seconds")
            }.disabled(flag)
        }
    }
}

struct DetailView: View {
    @Binding var flag: Bool
    let showTime: Double
    var body: some View {
        Text("Welcome").font(.largeTitle).foregroundColor(Color.orange)
            .onAppear {
                let _delay = RunLoop.SchedulerTimeType(.init(timeIntervalSinceNow: self.showTime))
                RunLoop.main.schedule(after: _delay) {
                    self.flag.toggle()
                }
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

enter image description here

1 голос
/ 23 марта 2020

Попробуйте это в LabelView ()

LabelView().onAppear {
                        Timer.scheduledTimer(withTimeInterval: 3, repeats: false) { timer in
                            withAnimation(.easeInOut(duration: 2)) {
                                self.presentClipboardView.toggle()
                            }
                        }
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...