iOS14-beta版本中,YYAnimatedImageView加載圖片失敗問題分析

wwdc2020發(fā)布后,適配iOS14先行版本,發(fā)現(xiàn)有些圖片居然消失不見了,其實現(xiàn)控件YYAnimatedImageView。github上issue也并未有人提次問題,baidu/google/Stack Overflow找找,也未找到對策。只好自己摸著石頭過河,嘗試分析啥原因了!

一、調查發(fā)現(xiàn)
添加YYAnimatedImageView和UIImageView到self.view上面,同時加載一張本地圖片(.image屬性賦值),發(fā)現(xiàn)YYAnimatedImageView不顯示,UIImageView顯示正常。

斷點調試,po view.layer,發(fā)現(xiàn)YYAnimatedImageView.layer.contents為空,UIImageView.layer.contents有值。
因此大致確認問題,在于未給.layer.contents賦值!

二、分析源碼中
YYAnimatedImageView底層重寫了- (void)displayLayer:(CALayer *)layer方法,如下

- (void)displayLayer:(CALayer *)layer {
 
    if (_curFrame) {

        layer.contents = (__bridge id)_curFrame.CGImage;
 
    }
 
}

在沒有_curFrame的情況下,不會重新設置layer.contents值。是否是這個問題呢?試看看

2、修改如下:

- (void)displayLayer:(CALayer *)layer {
    if (_curFrame) {
        layer.contents = (__bridge id)_curFrame.CGImage;
    } else {
        if (@available(iOS 14.0, *)) {
            [super displayLayer:layer];
        }
    }
}

居然可以了,本地圖片、網絡圖片、動圖都可以了。

三、測試發(fā)現(xiàn)
當繼承UIImageView,重寫- (void)displayLayer:(CALayer *)layer方法之后,如果在重寫方法里面沒有調用super方法,同樣加載失敗。

四、可能原因分析
如果iOS14-beta版本,在有重寫- (void)displayLayer:(CALayer *)layer的情況下,底層實現(xiàn)在設置.image屬性的時候,沒有設置layer.contents,就由可能出現(xiàn)改問題。而iOS14以下版本,可能實現(xiàn)邏輯不一樣,底層會設置layer.contents。

這也只是猜測,等iOS14版本正式看看是否有此問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內容