iOS 14下面圖片無法載入,包括weex、YYAnimateView、SDAnimatedImageView

2020-10-01 16:00:53

升級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;
//    }
}
```

參考:
1. https://github.com/apache/incubator-weex/issues/3265
2. https://github.com/ibireme/YYWebImage/issues/242
3. https://github.com/SDWebImage/SDWebImage/issues/3040

原地址:https://y500.me/2020/09/29/image-not-render-on-ios14/