2016-09-28 7 views
1

私は、WhatsAppオーバーレイと同じように動作するアプリケーションのオーバーレイを開発するために、iOSのPhotosフレームワークを使用しています。ユーザーのギャラリー画像のアセットにアクセスするには、Photosを使用する必要があり、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) 

collectionViewのための私のcellForItemAtIndexPathでは、私が使用:

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 
    }) 

アップルのドキュメントでは、どちらの場所でも同じtargetSize、contentMode、およびoptionsを使用してキャッシュを使用しています。そのため、イメージを設定するコールバックブロックは、クオリティタイ画像。

ただし、コレクションビューの最初の読み込み時、またはコレクションビューを読み込んだ場合でも、コールバックは2回、1回は低品質イメージで、2回目は高品質イメージで呼び出されます。

PhotosフレームワークにApple's tutorial codeをダウンロードしたときにバグだと思うことはできませんが、同じオプション、contentModeとtargetSizeをアセットに送信すると、キャッシュされると一度だけ呼び出されます。 (チュートリアルのコードでも、何度もコレクションをリロードしても、高品質の画像が最初に読み込まれます)。

私はAVFoundationコーディングが初めてで、この問題で困惑しているので、助けがあれば幸いです。

これは本当に長い読書だったのですが、助けてくれてありがとう!

+0

使いやすいイメージ捕捉のためのKingfisherフレームワークを試して、素早くバージョンごとにポッドを取得してください。 –

+0

ギャラリー画像のみを使用する必要がありますが、何もダウンロードする必要はありません – Kunal

答えて

0

読むについてPHImageRequestOptionsとプロパティdeliveryModeおそらくデフォルト値はopportunisticに設定されている

場合は、日和見

写真、自動的に画質と応答性を両立するために、1つのまたは複数の結果を提供します。

関連する問題