我有一个使用UIImageView的动画
myAnimatedView.animationImages = myImages;
myAnimatedView.animationDuration = 1;
myAnimatedView.animationRepeatCount = 1;
[myAnimatedView startAnimating];
如何判断动画在最后一帧停止还是在该系列图像的最后一帧可见?
提前谢谢
答案 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
来获取通知。
答案 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