今天爱分享给大家带来[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