gpt4 book ai didi

ios - Swift 如何知道布局是否在 layoutIfNeeded() 之后完成

转载 作者:行者123 更新时间:2023-11-28 20:59:35 27 4
gpt4 key购买 nike

我有一个适用于 iPad 的数学程序,它使用 Big Number 库进行计算,然后根据这些计算更新 UIView (myView) 中最多包含 20,000 个 UILabel 的数组。

计算可能需要大约 5 秒,在此期间,每个 UILabel 的 backgroundColor 都被设置为一种颜色。因为屏幕上没有发生任何事情,所以我在 ProgressLabel 中有一个闪烁的 UILabel 通知用户系统正在计算。然后我调用 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 后立即关闭,然后 UILabel 数组可能还需要五秒钟才能更新。

我想这可能是因为更新发生在不同的线程中。如果是这样,有没有办法确定 UIView 和 UILabel 数组何时完成更新(显示),以便我可以关闭闪烁的 UILabel?

非常感谢。

最佳答案

你可以试试

let dispatchGroup = DispatchGroup()

for row in 0..<rowCount
{

for col in 0..<colCount
{

dispatchGroup.enter()

self.doCalcAndUpdateLbl(index: i) { (finish) in

dispatchGroup.leave()
}
}
}

dispatchGroup.notify(queue: .main) {

myView.layoutIfNeeded()

inProgressLabel.turnOffBlinking()
}

关于ios - Swift 如何知道布局是否在 layoutIfNeeded() 之后完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com