当前位置: 首页 > 工具软件 > YYImage > 使用案例 >

YYImage的 YYAnimatedImageView 无法加载网络图片

周祺
2023-12-01

前言:为了在tableview 中更刘畅的加载 gif图片
1、使用 SDWebImage 的 SDAnimatedImageView 加载 gif 图片,少量无伤大雅,可以使用,大量会导致卡顿、崩溃
2、使用 YYWebImage 的 YYAnimatedImageView 加载 gif 图片,效果非常好,在 tableview 里边中没有卡顿现象,
3、使用 swift 的 Kingfisher 中的 AnimatedImageView 加载 gif 图片,这个和 SDWebImage 效果相差不大

但是测试发现,YY真的非常加载gif非常好,但是YY已经很久不更新了,在iOS14.0以上,YYAnimatedImageView只加载gif图 ,不能加载普通图片

使用下面是代码,只加载gif图片,很难受

private lazy var imageView: YYAnimatedImageView = {
let view = YYAnimatedImageView()
return view
}()
imageView.yy_setImage(with: URL(string: modelVM?.imgUrl ?? ""))

解决方法如下:
通过分类的方式对源码进行修改。新建 YYAnimatedImageView 的分类,实现以下方法

+ (void)load {
    // 获取系统的对象方法
    Method displayLayerMethod = class_getInstanceMethod(self, @selector(displayLayer:));
    
    // 获取自己定义的对象方法
    Method displayLayerNewMethod = class_getInstanceMethod(self, @selector(displayLayerNew:));
    
    // 方法交换
    method_exchangeImplementations(displayLayerMethod, displayLayerNewMethod);
}

- (void)displayLayerNew:(CALayer *)layer {
    
    Ivar imgIvar = class_getInstanceVariable([self class], "_curFrame");
    UIImage *img = object_getIvar(self, imgIvar);
    if (img) {
        layer.contents = (__bridge id)img.CGImage;
    } else {
        if (@available(iOS 14.0, *)) {
            [super displayLayer:layer];
        }
    }
}

亲测可用
我把YYImage放到了自己仓库里,并做了修改,大家可以放到Podfile 这样使用 ,当然别忘记了YYWebImage,其他什么都无需改动

pod 'YYImage', :git=> 'https://gitee.com/tripartite/YYImage.git',                 :tag=> '1.0.5'
 类似资料: