升級xcode12后,編譯運行App發現大片大片的圖片加載不出來,包括weex的圖片和YYAnimateView的圖片都有問題。
經過一番研究之后,發現是iOS 14下UIKit對 displayLayer:
的處理機制有所變化。
displayLayer:
是CALayerDelegate
的代理方法。在iOS 14之前,UIKit在調用這個方法之前就會去渲染UIImageView.image
。
而在iOS 14,UIKit則是先去調用代理方法,如果你實現了displayLayer:
這個方法,那么UIKit就不會再去渲染了。
如果改成下面這樣就可以正常加載了:
- (void)displayLayer:(CALayer *)layer {
UIImage *currentFrame = _curFrame;
if (currentFrame) {
layer.contentsScale = currentFrame.scale;
layer.contents = (__bridge id)currentFrame.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];
}
}
// if (_curFrame) {
// layer.contents = (__bridge id)_curFrame.CGImage;
// }
}
參考: