iOS 14の下の画像はロードできません.weex、YYAnimateView、SDAnimatedImageViewなどです.


xcode 12をアップグレードした後、コンパイルしてAppを実行すると、weexの画像とYYAnimateViewの画像を含む大きな画像がロードされないことがわかりました.
検討した結果、iOS 14におけるUIKEtのdisplayLayer:に対する処理機構が変化していることが分かった.displayLayer:は、CALayerDelegateの代理方法である.iOS 14の前に、UImitはこのメソッドを呼び出す前にUIImageView.imageをレンダリングします.iOS 14では、UImitはエージェントメソッドを先に呼び出し、displayLayer:というメソッドを実装すれば、UImitはレンダリングされません.
次のように変更すると、正常にロードできます.
- (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;
//    }
}

参照先:
  • https://github.com/apache/inc...
  • https://github.com/ibireme/YY...
  • https://github.com/SDWebImage...

  • 元アドレス:https://y500.me/2020/09/29/im...