我有以下动画图像序列:
IBOutlet UIImageView *block;
NSArray *image_arr = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imagedNamed:@"img2"],nil];
block.animationImages = image_arr;
block.animationDuration =1;
block.animationRepeatcount =5;
[block startAnimating];
方法animationDidStop:
-(void)animationDidStop:(NSString*)animationID finished:(BOOL)didFinish context:(void*)context{
NSLog(animationID);
}
在动画结束时调用animationDidStop方法需要做什么?
答案 0 :(得分:1)
UIImageView的“animationImages”属性与coreanimation无关,它只是触发一个内部NSTimer来切换图像。
-(void)animationDidStop:finished:context:
选择器作为核心动画的一部分被调用。
我在你的案例中尝试的是这样的:
IBOutlet UIImageView *block;
NSArray *image_arr = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imagedNamed:@"img2"],nil];
block.animationImages = image_arr;
block.animationDuration = animationDuration;
block.animationRepeatcount = animationRepeatCount;
[block startAnimating];
[self performSelector:@selector(animationFinished:) withObject:@"someAnimationId" afterDelay: animationDuration * animationRepeatCount];
请记住,此方法可能会导致一些延迟 - 如果动画帧的图像首次作为动画的一部分显示,则延迟加载会在动画开始播放之前启动,并且可能会影响performSelector调用的精度。
如果这是一个问题check out this answer's forceLoad method,并且如果这不起作用,则在隐藏的UIImageView上调用startAnimation,它为我做了一次。
答案 1 :(得分:0)
在动画结束时调用animationDidStop方法需要做什么?
你无法调用它,因为这不是核心动画。你在心理上混淆了两件不同的事情:
通过让UIImageView显示连续的图像,能够做非常简单的卡通风格动画;
核心动画,其中可以有完成块或完成处理程序。
我建议你做的是使用真实的核心动画,你可以实际设置动画和完成块或处理程序,或者只是通过使用延迟性能来回调你的这个伪动画结束后5秒钟自己的代码。
答案 2 :(得分:0)
使用最新的iOS版本4.2及更高版本,您应该使用块进行动画
以下内容将引导您朝着正确的方向前进,尝试将UIViewAnimationOption
更改为不同的内容:
[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionRepeat animations:^{
//Animation here
}completion:^(BOOL finished) {
if(finished){
//Your Code here
}
}