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];