使用场景,直播中送礼物的效果,点击了发送礼物之后,需要展示动态图gif
当前的实现方案是从服务端接口获取到gif图的url,然后开始展示,展示完成之后,对图片进行移除
podfile中
pod 'YYKit'
核心代码
#import "YYKit.h"
YYImage * image = [[YYImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:model.gif]]];
YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(Screen_Width / 2 - 300 / 2, 0, 300, 300);
imageView.backgroundColor = [UIColor clearColor];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[RACObserve(imageView, currentAnimatedImageIndex) subscribeNext:^(id _Nullable x) {
NSLog(@"play current page = %@",x);
if ([x integerValue] == imageView.animationImages.count) {
NSLog(@"play inner page = %@",x);
[imageView stopAnimating];
[imageView removeFromSuperview];
}
}];
[self.view addSubview:imageView];
[imageView startAnimating];
另一种实现方案(适用于帧数较少的方案)
当gif帧数太少的时候,需要循环播放,不停止播放的gif,这种情况下通过时间来控制展示和隐藏
此时可以移除rac监听方法
// [RACObserve(imageView, currentAnimatedImageIndex) subscribeNext:^(id _Nullable x) {
// NSLog(@"play current page = %@",x);
// if ([x integerValue] == imageView.animationImages.count) {
// NSLog(@"play inner page = %@",x);
// [imageView stopAnimating];
// [imageView removeFromSuperview];
//}
//}];
并在后面添加如下代码
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 需要延迟执行的代码
[imageView removeFromSuperview];
});
第一种方案适用于帧数较多或者对执行时间有苛刻要求的时候,
比如说动画内容是动态显示"爱你哦"三个字,总不能刚把爱字展示结束,动画就被移除了,这就很尴尬了
网友评论