UIImageView 开始/完成动画后更改图像

Posted

技术标签:

【中文标题】UIImageView 开始/完成动画后更改图像【英文标题】:Change image after UIImageView had started/completed animation 【发布时间】:2013-02-14 00:24:32 【问题描述】:

我需要我的图像视图在每个动画的开头和结尾更改其 .image。

这是动画:

- (void)performLeft

    CGPoint point0 = imView.layer.position;
    CGPoint point1 =  point0.x - 4, point0.y ;

    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position.x"];
    anim.fromValue    = @(point0.x);
    anim.toValue  = @(point1.x);
    anim.duration   = 0.2f;
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

    // First we update the model layer's property.
    imView.layer.position = point1;
    // Now we attach the animation.
    [imView.layer  addAnimation:anim forKey:@"position.x"];

我知道我可以打电话……

[anim animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)];

但我不知道如何使用动画来改变imView 的图像? 那么如何使用动画来改变我的图像视图的.image

谢谢!

【问题讨论】:

您在寻找哪种类型的动画?您可以尝试使用 [myView commitAnimations]。见这里:raywenderlich.com/2454/how-to-use-uiview-animation-tutorial 这个问题需要核心动画... 【参考方案1】:

简短的回答是您不能使用核心动画来更改图像视图的图像。核心动画在图层上运行,而不是视图。此外,Core Animation 只创建变化的外观。底层实际上根本没有改变。

我建议使用 UIView 动画而不是 CAAnimation 对象。然后你可以使用你的完成方法来改变图像。

UIImage 动画更容易实现,而且它确实会改变您正在制作动画的图像的属性。

基于 UIImage 动画的代码如下所示:

- (void)performLeft

  CGFloat center = imView.center;
  center.x = center.x - 4;
  imView.image = startingImage;  //Set your stating image before animation begins
  [UIView animateWithDuration: 0.2
  delay: 0.0
  options: UIViewAnimationOptionCurveEaseIn
  animations: 
  ^
     imView.center = center;
  
  completion:
  ^
  imView.image = endingImage;  //Set the ending image once the animation completes
  
  ];

【讨论】:

以上是关于UIImageView 开始/完成动画后更改图像的主要内容,如果未能解决你的问题,请参考以下文章

在 UIImageView 动画之后继续显示最后一张图片

更改设备方向时如何为uiimageview设置动画

通过图像更改为单个 UIImageView 编写多个动画

UIImageview 旋转动画

UIImageView 立即更改图像

动画 UIImageView