問題
更新iOS14
后發現原來使用的YBImageBrowser
瀏覽圖片出現黑屏,使用YYImage
顯示圖片也出現了相同的黑屏問題。
黑屏問題
原因??:iOS 14
系統調用方法- (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:鉤子函數
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];
}
}