iOS动态图加载笔记

使用场景,直播中送礼物的效果,点击了发送礼物之后,需要展示动态图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];
    });

第一种方案适用于帧数较多或者对执行时间有苛刻要求的时候,

比如说动画内容是动态显示"爱你哦"三个字,总不能刚把爱字展示结束,动画就被移除了,这就很尴尬了


借个地方放张gif图,请勿删除。

d3.gif

你可能感兴趣的:(iOS动态图加载笔记)