修复iOS 14 YYAnimatedImageView加载图片失败

方法一:

直接修改源码,但是如果是pod管理的YYImage的话,pod更新会覆盖。因该库已不再更新,可考虑直接拉取源码并修改。也可fork到自己的仓库并修改,pod地址指向自己的仓库。

YYAnimatedImageView.m中修改下方代码

- (void)displayLayer:(CALayer *)layer {
    if (_curFrame) {
        layer.contents = (__bridge id)_curFrame.CGImage;
    }else{
        if (@available(iOS 14.0, *)) {
          [super displayLayer:layer];
        }
    }
}

已修改好的pod库如下,可直接使用:

pod 'YYImage', :git => '[email protected]:anchoriter/YYImage.git'

方法二:

使用YYAnimatedImageView.m的分类,重写- (void)displayLayer:(CALayer *)layer方法实现,使用runtime进行方法交换。

+(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 imageIvar = class_getInstanceVariable([self class], "_curFrame");
    UIImage *image = object_getIvar(self, imageIvar);
    if (image){
        layer.contents = (__bridge id)image.CGImage;
    }else{
        if (@available(iOS 14.0, *)){
            [super displayLayer:layer];
            
        }
    }
}

你可能感兴趣的:(修复iOS 14 YYAnimatedImageView加载图片失败)