[iOS14] YYWebImage YYAnimatedImageView 网络图片不显示[解决方案]

今天爱分享给大家带来[iOS14] YYWebImage YYAnimatedImageView 网络图片不显示[解决方案],希望能够帮助到各位。

问题:
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
原文链接:https://blog.itblood.com/420.html,转载请注明出处。
0
塔纳托斯 精翻汉化版+全CG存档 [超爆款RPG/汉化/全动态/全CV]
塔纳托斯 精翻汉化版+全CG存档 [超爆款RPG/汉化/全动态/全CV]
5分钟前 有人购买 去瞅瞅看

站点公告

显示验证码
没有账号?注册  忘记密码?