方法一:
直接修改源码,但是如果是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 => 'git@github.com: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];
}
}
}