Я использую быстрый 3 для записи приложения iOS. Я пытаюсь написать кучу файлов в цикле и показать прогресс в пользовательском интерфейсе. Цикл идет:Обновить индикатор выполнения при записи файлов swift 3
- записи файла
- Проверка оставшегося дискового пространства
- Update UI и прогресс бар
- Loop
UI не обновляется до тех пор, цикл полностью не завершится. Достаточно смешно, я обновляю пользовательский интерфейс с начальными значениями FIRST THING в функции ViewDidAppear, прежде чем цикл начнется и это обновление произойдет даже после завершения цикла. Вот пример кода:
for _ in 0...100000 {
let image = UIImage(name: "someimage_\(nameExt!).png")
if let data = UIImagePNGRepresentation(image) {
let filename = getDocumentsDirectory().appendingPathComponent("myimage_\(nameExt!).png")
nameExt! = nameExt! + 1
try? data.write(to: filename)
}
let currentSpace = getSpace()
progress?.progress = abs(Float((capacity!-currentSpace)/capacity!))
let progressValue = progress?.progress
progressLabel?.text = "\(progressValue! * 100) %"
spaceRemaining?.text = "free space: \(currentSpace/1000000) MB"
print("free space: \(currentSpace/1000000000) GB")
print("\(progressValue! * 100) %")
print("----------")
}
Обновление пользовательского интерфейса происходит только тогда, когда основному потоку дается время для их обработки. Попробуйте переместить цикл 'for' на фоновый поток и перенаправлять изменения в элементы пользовательского интерфейса обратно на главную. –