美文网首页
iOS动态图加载笔记

iOS动态图加载笔记

作者: 数字d | 来源:发表于2021-07-13 14:25 被阅读0次

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

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

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

    相关文章

      网友评论

          本文标题:iOS动态图加载笔记

          本文链接:https://www.haomeiwen.com/subject/dmfspltx.html