美文网首页
iOS 加载GIF动图 -- 解决卡顿问题

iOS 加载GIF动图 -- 解决卡顿问题

作者: 小明2021 | 来源:发表于2019-11-07 16:57 被阅读0次

我用的 YYAnimatedImageView 方式加载动图,可以开始播放的时间,是否重复播放,从哪一帧开始播放等。简单好用。

个别老款手机,个别场景卡顿:

YYImage.init(named: "launchGif.gif") 这种方式添加的gif,个别情况,老手机会出现播放卡顿的情况。

解决办法:

UIImage.sd_tz_animatedGIF(with: imgDate) 替代就OK

直接上代码:


            let path = Bundle.main.path(forResource: "launchGif", ofType: "gif")
            var lastImg: UIImage = YYImage.init(named: "launchGif.gif") ?? UIImage.init() // 个别老手机卡顿
            if let imgDate = NSData.init(contentsOfFile: path ?? "") as Data? {
                lastImg = UIImage.sd_tz_animatedGIF(with: imgDate) // 用这种方式,能避免个别手机卡顿的bug
            }
            let videoGifImgV: YYAnimatedImageView = YYAnimatedImageView.init(image: lastImg)
            videoGifImgV.autoPlayAnimatedImage = false
            bgImageV.addSubview(videoGifImgV)
      .....

循环播放本地视频 -- 类似Keep启动背景动画

Keep的启动视频15秒,竟然才800多KB,GIF就很大,所有还是决定用mp4

!!!坑人的是播放视频竟然没循环播放的属性,需要添加监听方法,自己处理循环播放!!!

核心代码

#import <AVKit/AVKit.h>

    /// 视频的方式
    NSString *videoStr = @"login_iphone.mp4";
    if (kIsIpad_XM) {
        videoStr = @"login_ipad.mp4";
    }
    AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:videoStr withExtension:nil]];
    _player = [AVPlayer playerWithPlayerItem:item];
    _player.volume = 0;
    // 4.添加AVPlayerLayer
    AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
    playerLayer.frame = CGRectMake(0, 0, kScreenWidth_XM, kScreenHeight_XM);
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    [self.view.layer addSublayer:playerLayer];
    [_player play];
    UIView *maskV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth_XM, kScreenHeight_XM)];
    maskV.backgroundColor = [UIColor blackColor];
    maskV.alpha = 0.6;
    [self.view addSubview:maskV];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayDidEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.player.currentItem];

/// 视频循环播放
- (void)moviePlayDidEnd:(NSNotification*)notification {
    AVPlayerItem *item = [notification object];
    [item seekToTime:kCMTimeZero];
    [self.player play];
}

- (void)dealloc {
    XMLog("执行了,确保没循环引用");
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

相关文章

  • iOS 加载GIF动图 -- 解决卡顿问题

    我用的 YYAnimatedImageView 方式加载动图,可以开始播放的时间,是否重复播放,从哪一帧开始播放等...

  • UIImageView加载jpeg动图或gif动图

    IOS中,直接使用UIImage加载jpeg动图或gif动图,是没有动画效果的,可以使用YYKit框架里的YYIm...

  • iOS 11.0 MJRefresh刷新界面闪卡问题

    1.1 出现问题效果 分页加载数据时,界面刷新卡顿问题。 1.2 解决方法 1.3 截图代码 1.4 总结 iOS...

  • iOS加载本地GIF动图

    正常情况下,如果我们用UIImageView来直接加载本地GIF图片,运行显示图片并不是动态的,但是如果通过网络获...

  • iOS播放GIF图卡顿

    如题,我们项目在开屏广告中添加了GIF动画,由于启动过程中广告加载的同时也加载了首页,由于首页加载存在耗时操作,导...

  • 性能优化

    问题:setImageResource()造成卡顿和oom解决方案:使用图片加载框架Glide加载图片

  • iOS 创建GIF动图

    当我们网络加载GIF,或者获取到本地GIF的数据data时,可以将data转换成动图UIImage //获取动图 ...

  • SDWebImage加载GIF图(4.0版本之后不显示的问题)

    解决SDWebImage 加载GIF图,只显示一张或者不显示的问题。 4.0之后加载GIF的新方法是使用了一个FL...

  • Fresco Gif加载优化

    Fresco Gif加载优化 因为项目中需要用到加载Gif动图,而我们的图片加载框架用的就是Fresco,所以自然...

  • ios处理图片的一些小Tip(转)

    如何把 GIF 动图保存到相册? iOS 的相册是支持保存 GIF 和 APNG 动图的,只是不能直接播放。用 [...

网友评论

      本文标题:iOS 加载GIF动图 -- 解决卡顿问题

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