gpt4 book ai didi

objective-c - 在 UI 密集型循环期间更新 UI 进度

转载 作者:行者123 更新时间:2023-12-03 17:01:03 24 4
gpt4 key购买 nike

我有一个长时间运行的循环,其中涉及大量的 UI 函数。因此,该循环必须在主线程上运行。但是,我还想显示此任务的进度,因此这也必须在主线程上运行,因为显示当前进度将涉及更新 UI。我真的很难找到一种方法,当主循环也在主线程上运行时,允许 UI 根据主线程上的当前进度进行更新。发生的情况是 UI 在循环期间被卡住,然后更新以显示该过程完成后已完成。

这不是用于生产应用程序,而是用于永远不会发布的个人项目。因此,从用户体验的角度来看,用户界面被卡住并不重要。如果解决方案涉及将处理放在后台,那么这种重构就很好,但是当这个循环期间的大量繁重工作也涉及 UI 内容时,我不确定如何做到这一点。

最佳答案

你有时在发布问题后就想出了解决方案,这不是很有趣吗?!关键似乎不是使用 for 循环进行处理,而是将处理函数放在一个单独的方法中并重复调用它,将要处理的对象数组传递给它。为此,您可以使用 [self PerformSelector:withObject:afterDelay:] 调用该函数。即使您为延迟提供零值,它也会导致在下一个运行循环上调用该方法。这意味着您可以更新 UI,处理下一个项目,然后重复此过程,直到项目数组为空。这是我完成的解决方案。如果有人知道更好的方法,我仍然很乐意听到它,但现在这至少有效!

编辑 - 我将此解决方案打包成一个自己的类,以使其更易于管理,并将其放在我的 Github 上。也许它会帮助其他人:)

编辑 2 - 通过运行循环而不是遍历数组,使处理类更加灵活。当然,您可以使用它自己迭代数组,按照自述文件中的示例。但如果您不使用数组,则只需运行循环 runCount 次,并在 processingBlock 中执行您需要执行的操作。

https://github.com/mashers/BackgroundLoopProcessor

关于objective-c - 在 UI 密集型循环期间更新 UI 进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503259/

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