我希望在UILabel
动画停止播放的确切时刻更新UIImageView
。
我的尝试是使用 -
[self performSelector:@selector(updateLabels) withObject:nil afterDelay:imageView.animationDuration];
updateLabels
是更新标签的方法。
这对前几个动画不起作用。但是,它在播放前3或4次后确实有效。
我正在使用imageNamed
来填充保存动画图像的NSArray
。根据我的研究,我注意到imageNamed
缓存了对象。所以我假设前3或4次运行的延迟是由于缓存的滞后造成的。
无论如何要克服这个问题? (最好不要改变使用imageNamed
,因为我说它在前3或4之后的所有其他动画周期都正常工作。
答案 0 :(得分:0)
添加animationDidStop:
方法,该方法在动画停止时执行操作。
- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished
{
//Update your label
}
请注意,不要忘记在setDelegate
self
添加到uiimageview.animation
答案 1 :(得分:0)
你试过这个:(不是更好的实现,但是)//作为例子
在h.file中:
UIImageView *im;
im .m - file:
-(void) viewDidLoad
{
[super viewDidLoad];
im = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
UIImage *firstIm = [UIImage imageNamed:@"foo.png"]; // example pictures
UIImage *secondIm = [UIImage imageNamed:@"bar.png"];
im.animationImages = [NSArray arrayWithObject:firstIm, secondIm, nil];
im.animationDuration = 1.0;
im.animationRepeatCount = 4;
[im startAnimating];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabels) userInfo:nil repeats:YES];
}
-(void) updateLabels
{
if (![im isAnimating]])
{
//Update your label
}
}
它使用-imageNamed图片,但在这种情况下执行不能更好地检查结束动画。反正可能对你有帮助。