關於如何異步加載圖像和其他下載的數據有很多疑問,但沒有關於將這些圖像異步加載到UI中的問題。異步加載所有單元格內容
我想在我的UICollectionView上實現60 fps滾動,雖然我正在尋找適用於所有視圖的解決方案。
例如,如果我的資產文件夾中有要加載到快速滾動的UIScrollView中的圖像,則需要花費時間將它們帶入內存,然後在用戶界面中繪製。有什麼辦法可以先將這些圖像緩存在內存中(雖然不會傷害內存/使用太多),然後一旦將它們緩存到內存中,就將它們加載到內存中?
正如我現在明白了,當我說,
cell.imageView.image = UIImage(named: "grapes")
資產文件夾grapes
打開和讀取,然後它帶來相應的圖像(1X,2X,3X或)到內存中。將正確的圖像存入內存後,將cell.imageView.image
分配給它,然後繪製圖像。這是否準確?所有這些都發生在主線程上嗎?如果是這樣,那麼這是不是有可能阻塞主線程並導致設備跳過一些幀?
我假設在求解複雜表達式或格式化文本時會發生類似的過程。如果是這樣,那麼可以以及如何創建要異步加載的內容,以便主線程不會被阻塞(即使以臨時爲空的內容視圖爲代價)?
@Rob,通過「圖像的大小不適合用戶界面」,你的意思是UIImageView需要執行更多的操作來縮放或其他東西? – IHaveAQuestion
我在說的是一個圖像視圖,也就是說40x40點,但是您使用的圖像是1200x1200像素,並且您使用了「.scaleAspectFit」或「.scaleAspectFill」的內容模式。真的是任何情況下,你依靠'contentMode'來適當縮放你的圖像。或者,顯然,如果你正在調用你自己的縮放/裁剪例程。 – Rob