2016-07-05 7 views
0

Ich mache einen Analyseprozess auf Bild. Während ich alle Pixel durchlaufe, möchte ich eine Rückmeldung über den Fortschritt haben. Hier ist mein Code:UIProgressView nur Update-Werte statt UI

 for _ in 0 ..< height { 
      for _ in 0 ..< width { 
       analyzeImage(currentPixel) 
       currentPixel = currentPixel.successor() 
      } 
      updateProgress() 
     } 

func updateProgress() { 
    self.fractionalProgress += self.fractionalRatio 
    if (Int(self.fractionalProgress/self.fractionalRatio) % 20) == 0 { 
     self.progressBar.progress = self.fractionalProgress 
     print(self.progressBar.progress) 
    } 
} 

Ich rief updateProgress innerhalb einer verschachtelten for-Schleife. Das Druckergebnis wird aktualisiert, aber der Balken wird visuell nicht geändert. Es wird nur am Ende aktualisiert. Danke für jede Hilfe in fortgeschrittenen !!!!

Antwort

0

UIKit ist single threaded und soll nur vom Hauptthread ausgeführt werden. Wenn Sie mit einer Schleife arbeiten, die den Hauptthread bearbeitet, wird UIKit erst aktualisiert, nachdem der Code ausgeführt wurde und Ihre Methode zurückgegeben wurde.

Um den Fortschritt anzuzeigen, müssen Sie die Arbeit an einem Hintergrundthread ausführen und UIKit im Hauptthread aktualisieren. Lesen Sie Concurrency Programming Guide.

Verwandte Themen