所以我有这个代码可以无限次地动画一组图像,但是只要我试图限制它动画的次数就行不通。甚至没有显示图像。
有效的代码:
animatedMap.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"0.gif"],
[UIImage imageNamed:@"1.gif"],
[UIImage imageNamed:@"2.gif"],
[UIImage imageNamed:@"3.gif"],
//etc...];
animatedMap.animationDuration = 20.0f;
animatedMap.animationRepeatCount = 0;
[animatedMap startAnimating];
不起作用的代码:
animatedMap.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"0.gif"],
[UIImage imageNamed:@"1.gif"],
[UIImage imageNamed:@"2.gif"],
[UIImage imageNamed:@"3.gif"],
//etc...];
animatedMap.animationDuration = 20.0f;
animatedMap.animationRepeatCount = 1;
[animatedMap startAnimating];
这看起来真的很奇怪吗?
答案 0 :(得分:3)
我注意到了同样的行为,我的解决方案是将动画代码的开头放在不同的位置。
对我来说,它是一个视图控制器,所以我将imageView.startAnimating()
放在viewWillAppear:
而不是viewDidLoad:
。
我不是100%了解问题是什么,但可以假设动画没有触发,因为将animationRepeatCount
设置为1,你的"一个动画&# 34;在显示视图之前发生。为了更具技术性,带有一个动画的CATransaction::Commit
在显示视图之前执行,而不是在显示 视图时执行。
答案 1 :(得分:2)
animationRepeatCount
用于循环给定animationDuration
持续时间内的所有图像。
因此,如果您提供animatedMap.animationRepeatCount = 1;
,则表示只运行一个周期,然后将显示默认设置图像。如果您没有将默认图像定义为UIImageView
,那么它将为空白(即UIImageView
的背景颜色)
动画的给定持续时间可能会有更多的图像,从而导致超快动画。
更新1
您可以在开始动画之前设置最后一张图像。
NSArray *imgArray = [NSArray arrayWithObjects:
[UIImage imageNamed:@"0.gif"],
[UIImage imageNamed:@"1.gif"],
[UIImage imageNamed:@"2.gif"],
[UIImage imageNamed:@"3.gif"],
//etc...];
[animatedMap setImage:[UIImage imageNamed:[imgArray lastObject]]];
animatedMap.animationImages = imgArray
animatedMap.animationDuration = 20.0f;
animatedMap.animationRepeatCount = 0;
[animatedMap startAnimating];