gpt4 book ai didi

ios - 将 UIImages 数组缩放到指定的百分比会导致 UI 在几秒钟内没有响应?

转载 作者:行者123 更新时间:2023-11-28 08:11:48 25 4
gpt4 key购买 nike

目前我有 2 个高分辨率 UIImages 阵列,我正试图将其缩小到其原始分辨率的 30% 并在 UITableView 中重新加载其内容。我正在使用 Leo Dabus 的以下扩展 answer缩小图像:

extension UIImage {
func resized(withPercentage percentage: CGFloat) -> UIImage? {
let canvasSize = CGSize(width: size.width * percentage, height: size.height * percentage)
UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
defer { UIGraphicsEndImageContext() }
draw(in: CGRect(origin: .zero, size: canvasSize))
return UIGraphicsGetImageFromCurrentImageContext()
}
}

viewWillAppear 被调用时,我循环遍历两个数组,并将数组中的每个图像缩小到 30%,然后像这样重新加载 TableView :

override func viewWillAppear(_ animated: Bool)
{
DispatchQueue.main.async {

for index in 0..<self.arrayOne.count
{
self.arrayOne[index].image = self.arrayOne[index].image?.resized(withPercentage: 0.3)
}

for index in 0..<self.arrayTwo.count
{
self.arrayTwo[index].image = self.arrayTwo[index].image?.resized(withPercentage: 0.3)
}
}

self.tableView.reloadData()
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
...

let cellImage = cell.viewWithTag(1) as! UIImageView

var image: UIImage = UIImage()

if test1 == true
{
if let theImage = arrayOne[index].image
{
image = theImage
}
}
else
{
if let theImage = arrayTwo[index].image
{
image = theImage
}
}

cellImage.image = image

return cell
}

viewWillAppear 被调用时,我的 TableView 的所有数据都加载得很好,但是有 2-3 秒的延迟整个 UI 卡住,并且没有任何东西响应触摸。在该延迟之后,响应性重新出现并且正常。

我确定这与我的缩放功能有关,每次它必须缩小高分辨率图像时执行繁重的工作,导致 UI 暂时无响应,但我不确定如何解决此问题。

如何解决这个初始 UI 无响应问题?

谢谢。

最佳答案

卡住的原因是主线程用于维护 UI,如果您在其中运行硬计算,它会卡住您的应用程序。所以你应该像在代码片段中那样在后台运行你的循环,并在结束后在主线程中更新你的用户界面:

DispatchQueue.global(qos: .background).async {

for index in 0..<self.arrayOne.count
{
self.arrayOne[index].image = self.arrayOne[index].image?.resized(withPercentage: 0.3)
}

for index in 0..<self.arrayTwo.count
{
self.arrayTwo[index].image = self.arrayTwo[index].image?.resized(withPercentage: 0.3)
}

DispatchQueue.main.async {
self.tableView.reloadData()
}
}

编辑: Here不同QoS的描述。

关于ios - 将 UIImages 数组缩放到指定的百分比会导致 UI 在几秒钟内没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43575490/

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