之前在项目中使用SD加载图片的时候发现有些图片加载不出来,发现图片内存过大,导致加载过慢,从而显示不出来,看起来就是一个问题,后来就使用YY来加载图片,但是又有了一个新的问题就是GIF图片加载不出来,查询了相关资料找到了了相关方案
写一个YYAnimatedImageView的扩展
YYAnimatedImageView+Extension
+(void)load
{
// hook:钩子函数
Method method1 = class_getInstanceMethod(self, @selector(displayLayer:));
Method method2 = class_getInstanceMethod(self, @selector(dx_displayLayer:));
method_exchangeImplementations(method1, method2);
}
-(void)dx_displayLayer:(CALayer *)layer {
// if ([UIImageView instancesRespondToSelector:@selector(displayLayer:)]) {
// [super displayLayer:layer];
// }
//通过变量名称获取类中的实例成员变量
Ivar ivar = class_getInstanceVariable(self.class, "_curFrame");
UIImage *_curFrame = object_getIvar(self, ivar);
if (_curFrame) {
layer.contents = (__bridge id)_curFrame.CGImage;
} else {
if (@available(iOS 14.0, *)) {
[super displayLayer:layer];
}
}
}
这个写完之后GIF图片就能正常加载了
希望能帮到有缘人。