编辑
比上一种解决方案更好的方法是简单地切换启动和设置的顺序:
[self setImage:[UIImage imageNamed:[NSString stringWithFormat:@"frame-%d_29.png", self.frameSet]]];
[self startAnimating];
经过一番周折之后,我发现,如果将延迟设置为29/30秒(即~0.97秒),NSTimer解决方案实际上可以工作:
- (void)doAnimation
{
[self setAnimationRepeatCount:1];
[self setAnimationDuration:1];
[self startAnimating];
[NSTimer scheduledTimerWithTimeInterval:0.97f
target:self
selector:@selector(onTimer:)
userInfo:nil
repeats:NO];
}
- (void)onTimer:(NSTimer *)theTimer
{
[self stopAnimating];
[self setImage:[UIImage imageNamed:[NSString stringWithFormat:@"frame-%d_29.png", self.frameSet]]];
}