我已经阅读了在这里可以找到的有关此主题的所有内容,但仍然不确定继续进行的最佳方法。我有一个沉重的 UIImageView
,它使用一组胖的 UIImages
充当动画循环。此 UIImageView
用作应用程序中每个屏幕的背景。 (是客户的要求,不是我的,所以不要讨厌。)我们已经将 png 文件优化得尽可能小,但它仍然是一个相当重的负载。
我读过几篇关于 UIImage 如何在缓存中搜索该名称的现有图像(例如 Shared UIImageView for background image throughout app - Singleton Property )的文章,但这似乎并没有发生。我还在这里阅读了有关单例和在应用程序委托(delegate)中实例化的内容,但我不确定这是否是正确的继续方式。
在应用程序的生命周期中加载一次 UIImageView
并在每个 View Controller 的后台使用它的最佳方法是什么?顺便说一句,因为加载需要几秒钟,所以我将在应用程序启动时添加一个“加载”页面,该页面使用单个静态图像和事件指示器。
此外,我对测试和性能工具不太熟悉。我应该使用哪一个来测试性能并确保这是导致整个应用程序犹豫的原因?
提前为菜鸟问题致歉 - 我通常根本避免提出问题,但有时,就像在这种情况下,我什至不知道从哪里开始研究。
最佳答案
我对自己还是比较满意的。我采用了 AppDelegate 技术,它运行得非常好。我在 AppDelegate 中声明了一个 UIImageView 属性,然后将图像代码添加到其 getter 中:
- (UIImageView *)backgroundImageView {
if (!_backgroundImageView) {
NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:150];
for (int imageNum = 0; imageNum < 150; imageNum++) {
[tempArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"image_00%03i.png",imageNum]]];
}
_backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage animatedImageWithImages:tempArray duration:4.0]];
}
return _backgroundImageView;
}
这也允许我杀死 applicationDidReceiveMemoryWarning 中的对象。
然后我创建了一个帮助器类,我可以将其弹出到我的所有 UIViewController 类中:
+ (void)placeBackgroundImageUnderView:(UIView *)masterView {
myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
//Correct for shrinkage
appDelegate.backgroundImageView.frame = masterView.frame;
[masterView addSubview:appDelegate.backgroundImageView];
[masterView sendSubviewToBack:appDelegate.backgroundImageView];
}
这允许我在每个 viewDidLoad 方法中添加一行:
[HelperClass placeBackgroundImageUnderView:self.view];
问题是,仅使用 UIImage 就可以缓存整个内容并加快加载时间。但似乎图像时不时地需要重新加载 - 内存问题?因此,这使我可以通过实例化该对象一次并使用同一对象来更好地控制它,同时还可以将该对象设置为 nil 以在需要时释放内存。
自从添加它之后,整个应用程序的加载速度变得更快了。我添加了一个额外的加载屏幕,其中包含初始加载的事件指示器(也工作得很好),之后的一切都会立即变得愉快。
关于iphone - 整个应用程序中的单个动画 UIImageView 背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112296/