当使用UIImageView的startAnimating
方法来播放一系列的图片时,如果想要在最后一张图片上停止,可以使用以下方法:
NSTimer
定时器:在startAnimating
方法中,可以创建一个NSTimer
定时器,并设置适当的时间间隔。在定时器的回调方法中,检查当前显示的图片是否是最后一张,如果是,则调用stopAnimating
方法停止动画。
- (void)startAnimatingWithTimer {
NSArray *images = @[image1, image2, image3];
NSInteger count = images.count;
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerFired:) userInfo:@{@"images": images} repeats:YES];
_timer = timer;
}
- (void)timerFired:(NSTimer *)timer {
NSArray *images = timer.userInfo[@"images"];
static NSInteger index = 0;
if (index == images.count) {
index = 0;
}
UIImage *image = images[index];
self.image = image;
index++;
}
- (void)stopAnimating {
[_timer invalidate];
_timer = nil;
}
CAKeyframeAnimation
动画:使用CAKeyframeAnimation
动画可以更好地控制图片序列的播放。在动画的回调方法中,检查当前显示的图片是否是最后一张,如果是,则设置动画的removedOnCompletion
属性为NO
,并调用stopAnimating
方法停止动画。
- (void)startAnimatingWithKeyframeAnimation {
NSArray *images = @[image1, image2, image3];
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
animation.duration = 1.0;
animation.values = images;
animation.repeatCount = 1;
animation.delegate = self;
[self.layer addAnimation:animation forKey:@"imageAnimation"];
}
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if (flag) {
[self.layer removeAnimationForKey:@"imageAnimation"];
self.image = [anim.values lastObject];
}
}
- (void)stopAnimating {
[self.layer removeAnimationForKey:@"imageAnimation"];
}
这两种方法都可以实现在系列的最后一张图片上停止动画的效果。可以根据实际需求选择合适的方法。
领取专属 10元无门槛券
手把手带您无忧上云