2015-12-04 33 views
2

我有一個作爲數字資產管理器形式的web服務。我們的一些用戶在其帳戶中存儲了數千個圖像。我們想給他們一個iPhone應用程序,讓他們訪問這些圖像。我們可以使用無限滾動,但我們希望某種形式的uicollectionview表格可以通過帶有側面索引列表的日期分割,以便它們可以滾動並跳轉到。爲此,我們需要將他們的所有圖像下載到collectionview中,這看起來很瘋狂。如何處理在iOS應用程序中顯示,搜索和過濾大量圖像?

如何處理別人展示,搜索和過濾大量的圖像?

+0

異步加載;使用小縮略圖的數據索引,只需要加載個別較大的圖像;一次確定屏幕上有多少圖像適合屏幕顯示,並且只能保留多少個+某些緩衝區;緩存下載到一個點;根據需要從內存中移除圖像。順便說一句,tableview/collection視圖仍然是「無限滾動」,即使有一個邊欄索引或小節標題,但你肯定不想一次加載所有內容,否則你很快就會發現它無響應並容易崩潰。 – mc01

回答

0

時通常需要大量的數據從一個網絡服務(或文件系統)下載的關鍵是不要做一次全部,而是將其劃分爲您加載和卸載需要管理的部分。沒有辦法做到這一點,但這是一般的想法。

要管理這個過程,可以下載一個描述所有內容的完整索引(如圖像url的json列表)而不下載數據庫中的每個圖像或數據片段(但不是必要的 - 這是贏得的)與數百萬條記錄一起工作)。這使您可以在不需要大量下載的情況下搜索和瀏覽內容。

在你的問題聽起來好像你的圖像按日期範圍有所分組。您可以探索的可能程序可能類似於:

  1. 下載所有圖像的索引及其相關日期並將其加載到內存中。 (在成千上萬這應該是沒有問題的)。

    images : [ 
        { 
         url: "http://someurl/image.png", 
         name: "Great Image!", 
         date: "12/3/15" 
         // possibly include more data like search tags... 
        },.. 
    ] 
    
  2. 開始下載與最近日期範圍相關的初始圖像集,並在完成時顯示它們。

  3. 當用戶選擇在集合視圖一個新的日期範圍或頁面滾動,顯示佔位符圖像平鋪。開始異步下載新圖像並在它們到達時顯示它們。
  4. 從內存中卸載上一個日期範圍內的圖像。 (你可以在文件系統中保存一個緩存)。
  5. 重複隨着可見區域的變化。

在iOS上,我通常使用AFNetworking(或者AlamoFire for Swift)來處理異步網絡請求。

+0

優秀的答案。我將如何卸載圖像? – JoshL

+0

@JoshL你指的是告訴圖像卸載的實際代碼?或者決定何時卸載? –

+0

我猜都:) – JoshL

相關問題