2016-10-25 2 views
0

私は1秒ごとに1つの定数を配列に追加しますが、配列が変更されたときに毎秒プログレスバーを更新できますか?進捗バーを段階的に更新するにはどうすればよいですか?

var array: [Int] = [] 

override func viewWillAppear(_ animated: Bool) { 
     upgradeArray() 
    } 

    func upgradeArray() { 
     for i in 0...10 { 
      sleep(1) 
      array.append(i) 
      print(i) 
      let percentProgress = Float(Float(self.array.count)*100.0/10.0) 
      progressBar.setProgress(percentProgress, animated: true) 
     } 

    } 
+0

.async私はどのようにベースのユーザーに見せ必要 – Skie

答えて

0

(優先順位:.DEFAULT)

func upgradeArray() { 
     for i in 0...10 { 
      DispatchQueue.global(priority: .default).async { 
       //sleep(1) 
       self.array.append(i) 
       print(i) 
       DispatchQueue.main.async(execute: { 
        let percentProgress = Float(Float(self.array.count)*100.0/10.0) 
        self.progressBar.setProgress(percentProgress, animated: true) 
       }) 
      } 
     } 

    } 
+0

例最初のvar配列のような2つの整数値を助けます:[Int] = [1500] &var total = 500です。あなたの方法を使ってswift 3.0での出力のタイプ –

1

タイマーを使用します。あなたの進行状況ビューは0〜1であると仮定すると0.1秒ごとにインクリメント... DispatchQueue.globalで行わ

var timer: Timer? 
var array = [String]() 

func doStuff() { 

    timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true, block: { timer in 

     self.array.append("foo") 

     let change: Float = 0.1 
     self.progressView.progress = self.progressView.progress + (change) 

     if self.progressView.progress >= 1.0 { 
      self.timer?.invalidate() 
     } 
    }) 
} 
+0

ありがとう、しかし、私は配列の解析との同期作業が必要 – Skie

+0

私はあなたが達成しようとしているかどうかはわかりませんが、あなたが既に配列に毎秒オブジェクトを追加しているなら、同じタイマー。追加するオブジェクトの数がわかっている場合は、 'change'定数を1 /期待数要素の総数に変更することができます。 – Frankie

+0

コアデータベースに16000+の矢印のJSONベースを挿入する必要があります – Skie

関連する問題