2016-09-28 33 views
1

我正在使用iOS中的Photos框架爲我的應用程序開發覆蓋層,其工作方式類似於WhatsApp覆蓋層。爲了訪問用戶的圖片資源,我需要使用照片,並且無法使用UIImagePickerController。PHCachingImageManager不緩存Swift 2.3

,以獲得更好的介紹與框架,我決定先建立自己的圖片選擇,我開始了與加載圖片來自我的畫廊,並把它變成一個集合視圖一個簡單的屏幕上。一旦我使用PHAsset.fetchAssets(with: .image, options: fetchOptions) as PHFetchResult<PHAsset>

資產。然後,我在一個陣列中使用這些資產,在默認啓動緩存PHCachingManager如下:

cachingImageManager.startCachingImages(for: self.assets, 
               targetSize: CGSize(width: 150.0, height: 150.0), 
               contentMode: .default, 
               options: nil) 

在我cellForItemAtIndexPath爲的CollectionView,我使用:

cachingImageManager.requestImage(for: assets[indexPath.row], targetSize: CGSize(width: 150.0, height: 150.0), contentMode: .default, options: nil, resultHandler: { (image, info) in 
     cell.imageView.image = image 
    }) 

正如您所看到的,按照Apple文檔,我在兩個地方都使用與targetSize,contentMode和options完全相同的緩存,因此,我設置圖像的回調塊應該被調用一次合格ty圖像。

然而,如果我重新加載的CollectionView,或甚至在集合視圖的第一負載,回叫被調用兩次,具有低質量圖像和所述第二時間具有高質量圖像一次。

我不禁想到這是一個錯誤,因爲我爲Photos框架下載了Apple's tutorial code,並且確實如此,即使文檔明確指出如果我們爲資產發送相同的選項contentMode和targetSize,在獲取緩存時只會調用一次。 (即使教程代碼首先加載低質量圖像,然後再加載高質量圖像,無論您重新加載集合多少次)。

任何幫助,因爲我是新來AVFoundation編碼,並通過這個問題已經被難倒是非常讚賞。

對不起,如果這是一個很長的閱讀,但預先感謝任何幫助!

+0

嘗試翠鳥框架圖像捕捉易於使用,並得到莢按您的SWIFT版本。 –

+0

雖然我只需要使用圖庫圖片,但我不需要下載任何東西 – Kunal

回答

0

閱讀PHImageRequestOptions和財產deliveryMode可能是默認值設置爲opportunistic

的情況下伺機

照片自動提供以平衡圖像質量和響應一個或多個結果。