問題
更新iOS14
后發(fā)現(xiàn)原來使用的YBImageBrowser
瀏覽圖片出現(xiàn)黑屏葡盗,使用YYImage
顯示圖片也出現(xiàn)了相同的黑屏問題草穆。
黑屏問題
原因??:iOS 14
系統(tǒng)調(diào)用方法- (void)displayLayer:(CALayer *)layer
,YYAnimatedImageView
沒有正確處理副女。
解決
方式一
-(void)displayLayer:(CALayer *)layer {
UIImage *currentFrame = _curFrame;
if (!currentFrame) {
currentFrame = self.image;
}
if (currentFrame) {
layer.contentsScale = currentFrame.scale;
layer.contents = (__bridge id)currentFrame.CGImage;
}
}
方式二
- (void)displayLayer:(CALayer *)layer {
if (_curFrame) {
layer.contents = (__bridge id)_curFrame.CGImage;
} else {
// If we have no animation frames, call super implementation. iOS 14+ UIImageView use this delegate method for rendering.
if ([UIImageView instancesRespondToSelector:@selector(displayLayer:)]) {
[super displayLayer:layer];
}
}
}
方式三
pod 'YYImage', :git => 'https://github.com/QiuYeHong90/YYImage.git'
方式四
#import "YYAnimatedImageView+Extension.h"
@implementation YYAnimatedImageView (Extension)
+(void)load
{
// hook:鉤子函數(shù)
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];
}
}