我可以在最后一帧停止UIImageView动画吗?

时间:2010-05-05 20:23:17

标签: iphone cocoa-touch uikit

我有一个使用UIImageView的动画

myAnimatedView.animationImages = myImages;
myAnimatedView.animationDuration = 1;
myAnimatedView.animationRepeatCount = 1;
[myAnimatedView startAnimating];

如何判断动画在最后一帧停止还是在该系列图像的最后一帧可见?

提前谢谢

9 个答案:

答案 0 :(得分:73)

UIImageView类上的image属性具有以下文档: “如果animationImages属性包含的值不是nil,则不使用此属性的内容。”

因此,在iOS4中保持动画的最后一帧的技巧是首先将图像属性设置为最后一帧(当animationImages仍为零时),然后设置animationImages属性并调用startAnimating。动画完成后,将显示图像属性。不需要回调/代理。

答案 1 :(得分:14)

您可以将最后一帧的图像设置为UIImageView实例,然后当动画完成时,最后一帧图像仍然可见。这是代码:

// create your array of images
NSArray *images = @[[UIImage imageNamed:@"video1.png"], [UIImage imageNamed:@"video2.png"]];
UIImageView *imageView = [UIImageView new];
imageView.image = images.lastObject;
imageView.animationImages = images;
imageView.animationDuration = 1.0; // seconds
imageView.animationRepeatCount = 1;
[imageView startAnimating];

答案 2 :(得分:6)

动画结束后,您可以将UIImageView图像设置为动画的最后一帧。

myAnimatedView.image = [myAnimatedImages objectAtIndex:myAnimatedImages.count - 1]

我认为没有一个委托方法会在animationFinish事件中通知您,因此您需要启动与动画相同持续时间的NSTimer来获取通知。

UIImageViewAnimation documentation

答案 3 :(得分:1)

我只是扔了一个UIView,在动画UIView的顶部拿着第一帧...... 隐藏动画视图并将其图像设置为最后一帧... 然后让他们在此过程中切换隐藏的属性。

so... just before your last line...
// quickly hide the view that only holds the first frame
myOtherView.hidden = YES;
// start the animation
[myAnimatedView startAnimating];
// show the animation view
myAnimatedView.hidden = NO;
// BAM, done. It will use the last image when it ends.

尽可能减少代码,增加IB。

答案 4 :(得分:1)

我通过创建UIImageView的子类来实现这一点,在调用super.startAnimating()之前,重写startAnimating()并将image属性设置为图像数组中的最后一个图像。 除了将animationRepeatCount设置为1之外,还可以实现所需的效果。

这是我的Swift课程:

class SuccessAnimationImageView: UIImageView {

var duration: NSTimeInterval = 2

override func didMoveToSuperview() {
    super.didMoveToSuperview()
    setupImages()
}

override func startAnimating() {
    setLastFrame()
    super.startAnimating()
}

func setupImages() {
    animationImages = ImageHelper.successAnimationImages
    image = animationImages?.first
    animationRepeatCount = 1
}

func setLastFrame() {
    image = animationImages?.last
}
}

答案 5 :(得分:0)

快速版本如下所示,但在Objective-C逻辑中相同
您只需将image中的UIImageView设置为images数组的最后一个图像即可破解它。就在动画代码之前,例如imageView.image = arrayOfImage.last
整个逻辑如下

        imageView.image = arrayOfImage.last //(this line create magic)
        imageView.animationImages = arrayOfImage
        imageView.animationDuration = 1.0
        imageView.animationRepeatCount = 1
        imageView.startAnimating()

答案 6 :(得分:0)

开始/停止动画和管理动画计数时出现问题,因此使用了this吊舱

php --ini

开始/停止动画:

imageViewObject.animate(withGIFNamed: "gif_name", loopCount: 1) {
        print("animating image")
}

答案 7 :(得分:-1)

您是否已将旋转动画的removedOnCompletion属性设置为NO, 例如。, rota.removedOnCompletion = NO;

这应该使表示层离开动画结束时的位置。默认值为YES,它将快照回模型值,即您描述的行为。 还应设置fillMode,

即, rota.fillMode = kCAFillModeForwards;

答案 8 :(得分:-1)

您可以通过设置UIImageView属性来停止动画 animateImg.animationDuration = 1