UIImageView animationDuration缓存延迟

时间:2012-08-21 11:54:07

标签: iphone objective-c ios caching uiimageview

我希望在UILabel动画停止播放的确切时刻更新UIImageView

我的尝试是使用 -

[self performSelector:@selector(updateLabels) withObject:nil afterDelay:imageView.animationDuration];

updateLabels是更新标签的方法。

这对前几个动画不起作用。但是,它在播放前3或4次后确实有效。

我正在使用imageNamed来填充保存动画图像的NSArray。根据我的研究,我注意到imageNamed缓存了对象。所以我假设前3或4次运行的延迟是由于缓存的滞后造成的。

无论如何要克服这个问题? (最好不要改变使用imageNamed,因为我说它在前3或4之后的所有其他动画周期都正常工作。

2 个答案:

答案 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图片,但在这种情况下执行不能更好地检查结束动画。反正可能对你有帮助。