在我的应用程序中,有动画的260张图片,尺寸为640 * 1136的 .jpg 文件。我按如下方式加载数组中的所有图片。
点击按钮
- (void)singButtonClick:(id)sender
{
[self initSingArray];
[self startAnimationWithImages:singArray duration:2];
}
它将分配init我的数组,并从资源文件夹
加载所有260个图像self.imageArray = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:nil];
- (void)initSingArray
{
if (!singArray)
{
singArray=[[NSMutableArray alloc] init];
for(NSString *str in self.imageArray)
{
if([[str lastPathComponent] hasPrefix:@"Sing_"])
{
[singArray addObject:[UIImage imageNamed:[str lastPathComponent]]];
}
}
}
}
并且对于Image动画,只使用该数组并将其传递给UIImageView
- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration
{
[self startAnimationWithImages:images duration:duration repeatCount:1];
}
- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration repeatCount:(int)repeatCount
{
if (self.gifImageView.isAnimating)
{
[self.gifImageView stopAnimating];
}
self.gifImageView.animationImages = nil;
self.gifImageView.animationImages = images; // Animated image array
self.gifImageView.animationDuration = duration; // Perform a full animation when
self.gifImageView.animationRepeatCount = repeatCount;// Animation number of repetitions
[self.gifImageView startAnimating];
}
但是当第一次点击按钮时,动画需要很长时间。当图像数量较少时,它会正常工作。
图像尺寸是否会产生问题?
请帮我解决。
注意:我发现很多帖子都与此问题相关,但没有一个能帮我解决这个问题。
答案 0 :(得分:0)
您必须在[self initSingArray];
或其他地方执行此操作viewDidLoad
,而不是点击按钮。它会解决你的问题。在你的情况下,原因是第一次创建图像数组所以需要时间。
答案 1 :(得分:0)
在imageview-animation-getting-more-memory查看我对同一类问题的回答。最重要的是,您永远不会使用animationImages方法和许多像您一样的图像来使您的应用程序工作。您最好使用已经处理内存问题的现有解决方案,并提供一种方法来避免在动画开始显示之前将所有图像数据解码到内存中(这就是开始制作动画的速度很慢的原因)。
答案 2 :(得分:0)
经过大量的R& D最后我解决了这个问题,一些感谢blog-post.My应用程序成功运行,没有崩溃问题和快速响应。
而不是使用 UIImageView 进行动画制作试用此帖子Memory_usage_on_ios
和 simplified PNG animation example code
希望这个答案可以帮助某人在没有内存泄漏问题的情况下为大量图像帧制作动画。