我希望在UIImageView中为图像添加动画效果,以便像UIModalTransitionStyleCrossDissolve一样在一秒内变成下一个图像。
目前,我有一个名为“imageView”的UIImageView *和一个名为“imageForState”的函数,它返回一个正确图像的UIImage *。
所以我想做的是将图像A平滑地动画到图像B(如果有的话)。
目前,我的功能是这样的:
- (UIImage *) imageForState{
NSLog(@"state: %d", [save state]);
switch ([save state]) {
case 0:
case 1:
return [UIImage imageNamed:@"Sakuya_Debug.PNG"];
case 2:
return [UIImage imageNamed:@"Sakuya_2_Debug.PNG"];
default:
return NULL;
//Never called
}
}
-(void) tap{
[imageView setAnimationImages:[NSArray arrayWithObjects:[imageView image], [self imageForState], nil]];
imageView.animationDuration = 2.0;
[imageView startAnimating];
save.state++;
}
我的问题是,1。)动画永远持续(当我将imageView.animationRepeatCount设置为1时,我再次在第一个图像处结束)和b。)动画不流畅;就像我会使用“setImage”;
我做错了什么?
答案 0 :(得分:3)
我建议使用两个imageView和一个动画块。在下面的例子中,我假设两个方形图像的siza为100px。如果将两个imageViews添加为子视图,请确保在imageA之后添加imageB,以便覆盖它。
UIImageView *imageA = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Sakuya_Debug.PNG"]];
UIImageView *imageB = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Sakuya_2_Debug.PNG"]];
// hide the second image
imageB.alpha = 0.0;
// put the image with the same size at same position
imageA.frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
imageB.frame = imageA.frame;
- (void)crossDissolveImageAtoB
{
[UIView animateWithDuration:1.0
animations:^{
imageB.alpha = 1.0;
}
completion:^(BOOL finished){
// do something after the animation finished,
// maybe releasing imageA if it's not used anymore...
}];
}