UIImageView animationRepeatCount奇怪的行为
所以我有这样的代码,animation一组图像无限次的数量就好了,但只要我试图限制它的animation次数简直不起作用。 甚至没有图像显示。
代码工作:
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];
这似乎真的很奇怪的行为?
我注意到同样的行为,我的解决scheme是把animation代码的开始放在不同的地方。
对我来说,这是一个视图控制器,所以我把imageView.startAnimating()
在viewWillAppear:
而不是viewDidLoad:
我不是100%明白是什么问题,但可以假设animation不会触发,因为通过设置animationRepeatCount
为1,您的“一个animation”发生在视图显示之前。 更具技术性的是,在显示视图之前执行带有一个animation的CATransaction::Commit
,而不是在显示视图时执行。
animationRepeatCount
用于在给定的animationDuration
持续时间中循环所有图像。
所以如果你提供animatedMap.animationRepeatCount = 1;
这意味着只会运行一个循环,然后显示默认的设置图像。 如果你没有定义默认的图像到UIImageView
那么它将是空白的(即UIImageView
背景颜色)
有可能有更多的图像,然后给定的时间为animation,从而导致超快速的animation。
更新1
您可以在开始animation之前设置最后一个图像。
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];