У меня есть математическая программа для iPad, использующая библиотеку больших чисел, которая выполняет вычисления, а затем обновляет массив до 20 000 UILabels в UIView (myView) на основе этих вычислений.
Расчеты могут занять около 5 секунд, в течение которых для backgroundColor каждого из UILabels устанавливается цвет. Поскольку на экране ничего не происходит, у меня мигает UILabel inProgressLabel, который информирует пользователя о том, что система рассчитывает. Затем я вызываю layoutIfNeeded с мыслью, что по окончании экран будет обновлен. Наконец я выключаю мигающую UILabel.
Вот псевдокод:
inProgressLabel.turnOnBlinking()
for row in 0..<rowCount
{
for col in 0..<colCount
{
// perform some calculation
let z = buttonArray[row][col].performCalculation()
//now set the Label background based on the result of the calculation
buttonArray[row][col].setLabelBackground(z)
}
}
myView.layoutIfNeeded()
inProgressLabel.turnOffBlinking()
Насколько я понимаю, layoutIfNeeded () является синхронным. Таким образом, экран будет обновляться, а затем и только тогда мигающий inProgressLabel будет отключен. Однако inProgressLabel фактически отключается сразу после вызова layoutIfNeeded, а затем может потребоваться еще пять секунд для обновления массива UILabels.
Я подумал, что, возможно, это происходит, потому что обновление происходит в другом потоке. Если это так, есть ли способ точно знать, когда UIView и массив UILabels закончили обновление (отображение), чтобы я мог затем отключить мигающую UILabel?
Большое спасибо заранее.