gpt4 book ai didi

ios - 如何在加载大型 UIImage 时改善用户体验?

转载 作者:行者123 更新时间:2023-11-28 18:39:37 24 4
gpt4 key购买 nike

我在我的 iPad 应用程序中使用大图片 (2000x2000, 500kb) 作为大多数 View Controller 的背景图像。

问题是应用程序似乎在第一次使用这样的图像加载子 ViewController 时卡住在父 ViewController 上(我假设由于缓存,稍后它会更快)。

我会在一个单独的线程中加载它,并在加载时显示一些指示器,但是我知道所有与 UI 相关的操作都应该在主线程上完成。

有什么方法可以改善用户体验,使该应用程序似乎不会卡住大约 5 分钟。 2秒? (在我的情况下不能选择平铺图像)

最佳答案

所有的UIKit操作都应该在主线程中完成是错误的!只有绘制的操作应该在主线程上执行。在单独的线程中加载一个 UIImage 并在之后将其交给主线程是完全省事的。但是我不认为加载需要那么长时间。我认为这可能是需要时间的绘图。

但是:由于 UIActivityIndi​​catorView 在其自己的线程中运行(与所有 CoreAnimation 动画一样),它会保持动画效果,即使您在添加指示器后阻塞主线程也是如此。试试这个:

UIActivityIndicatorView* activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[activityIndicator startAnimating];
[self addSubview:activityIndicator];

dispatch_async(dispatch_get_main_queue(), ^{
UIImage* image = [UIImage imageNamed:@"MyImage"];
UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
[self addSubview:imageView];

[activityIndicator removeFromSuperview];
});

这将启动一个 UIActivityIndi​​cator 并在下一个运行循环周期中开始加载图像。添加图像后,它会删除 super View 。也许你必须再次调度事件指示器的移除,以便 UIKit 有时间绘制图像。在这种情况下,但是 [activityIndi​​cator removeFromSuperview] 在另一个 dispatch_async 到第一个 block 内的主队列。

关于ios - 如何在加载大型 UIImage 时改善用户体验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951915/

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