可能我会问另一个人提出的同一个问题(但是没有回复):Speed up first UIImageView animation (force cache the images)
但是,我的简短问题是:
我在资源中有60个图像,在时间间隔循环中我将为这些图像设置动画,每次设置为 UIImageView.image 来自资源的 n'th 图像。
问题是:第一个动画很糟糕!当我在同一个UIImageView中再次循环所有图像时,动画是完美的。我们可以在UIImageView中预先缓存图像吗?
编辑:或者我们可以制作一些技巧,让动画流畅吗?
答案 0 :(得分:18)
方法
[UIImage imageNamed:@""]
缓存图像。 UIImageView没有。我在一个应用程序中遇到问题,因为内存不足导致大量图像崩溃。
如果我更改为不缓存图像的[UIImage imageWithContentsOfFile:@""]
,则修复此问题。
要预先缓存图像,只需在init方法中为所需的所有图像调用[UIImage imageNamed:@""]
即可。但如果你收到一个记忆警告图像将被解除分配。
答案 1 :(得分:4)
UIImageView不会像[UIImage imageNamed:@""]
那样缓存图像。不幸的是,如果你有很多图像,imageNamed会使你的应用程序崩溃,因为它的内存不足。
您可以使用[UIImage imageWithContensOfFile:@""]
预加载NSArray中的所有图像。
一旦你有阵列,你可以做你想做的!
答案 2 :(得分:2)
不,UIImageView不会缓存图像。 image
属性声明为retain,因此当您设置新图像时,imageView会将release
消息发送到旧图像,将retain
发送到新图像。
为UIImageView设置动画的最简单方法是将图像数组设置为属性animationImages
并调用startAnimating方法
imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"], ..., nil];
imageView.animationDuration = 2.0f;
[imageView startAnimating];