美文网首页iOS 14
iOS14 YYWebImage YYAnimatedImage

iOS14 YYWebImage YYAnimatedImage

作者: ElegantLiar | 来源:发表于2020-10-13 16:02 被阅读0次

    表现

    YYWebImage + YYAnimatedImageView 展示的图片,在iOS 14上无法正常展示,iOS 14以下正常展示。

    原因

    iOS 14 重写- (void)displayLayer:(CALayer *)layer的情况下,底层实现在设置.image属性的时候,没有设置layer.contents,就有可能出现此问题。而iOS14以下版本,可能实现逻辑不一样,底层会设置layer.contents所以正常展示。

    解决方案

    利用runtime + category,对 YYAnimatedImageView category,交换displayLayer:,区分iOS 14实现。

    .h 文件如下

    #import "YYAnimatedImageView.h"
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface YYAnimatedImageView (Layer)
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    

    .m 文件如下

    #import "YYAnimatedImageView+Layer.h"
    
    @implementation YYAnimatedImageView (Layer)
    
    + (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];
            }
        }
    }
    
    @end
    
    

    有帮助烦请点赞鼓励 ~

    相关文章

      网友评论

        本文标题:iOS14 YYWebImage YYAnimatedImage

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