表現(xiàn)
YYWebImage + YYAnimatedImageView 展示的圖片,在iOS 14上無法正常展示臣镣,iOS 14以下正常展示。
原因
iOS 14 重寫- (void)displayLayer:(CALayer *)layer
的情況下,底層實現(xiàn)在設(shè)置.image屬性的時候,沒有設(shè)置layer.contents帘瞭,就有可能出現(xiàn)此問題。而iOS14以下版本蒿讥,可能實現(xiàn)邏輯不一樣蝶念,底層會設(shè)置layer.contents所以正常展示。
解決方案
利用runtime + category芋绸,對 YYAnimatedImageView category媒殉,交換displayLayer:
,區(qū)分iOS 14實現(xiàn)摔敛。
.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
有幫助煩請點贊鼓勵 ~