CoreDataデータベースを使用して製品にデータを格納するアプリケーションを構築しています。これらの製品は、UICollectionViewに表示されます。このCollectionViewの各セルには、イメージを含む製品に関する基本情報が表示されます。SwiftのCoreDataからの非同期画像読み込み
セルは比較的小さいが、それらが表示する原画像は、より大きな画像ビューでも表示できる必要があるため、静かであることが好ましい。 > UICollectionViewCell { 細胞= collectionView.dequeueReusableCell(withReuseIdentifierましょう:は、 "セル"、:indexPath -
FUNCのcollectionView(IndexPath _ collectionView:::UICollectionView、cellForItemAt indexPath)画像は私のCellForItemAtIndexPath:
方法でCoreDataから直接ロードされ)として!製品のコレクションが育つCollectionWineCell
var current: Product!
//product details are set on labels
//image is set
if current.value(forKey: "image") != nil {
let image = current.value(forKey: "image") as! WineImage
let loadedImage = UIImage(data: image.image)
cell.imageview.image = loadedImage
} else {
cell.imageview.image = UIImage(named: "ProductPlaceholder.png")
}
return cell
}
は、スクロールはbumpierに取得し、フレームの多くがドロップされます。これは私にとって理にかなっていますが、今のところ私は適切な解決策を見つけていません。オンラインで見ると、URL(オンラインまたはファイルパス)から非同期イメージを読み込むための多くのドキュメントとフレームワークが利用できますが、CoreDataからこれを行うことはあまり一般的ではありません。
私はすでにフェッチ要求を非同期を使用してそれをやって試してみました:
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName:"ProductImage")
fetchRequest.predicate = NSPredicate(format: "product = %@", current)
let asyncRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest) { results in
if let results = results.finalResult {
let result = results[0] as! ProductImage
let loadedImage = UIImage(data: result.image)
DispatchQueue.main.async(execute: {
cell.wineImage.image = loadedImage
})
}
}
_ = try! managedObjectContext.executeRequest(asyncRequest)
しかし、このアプローチは、大量のデータセットを表示する場合のいずれか
QUESTION 物事をスムーズに思われません、 CoreDataの画像も含めて、UICollectionViewでラグやフレームドロップが発生しないようにイメージをロードするにはどうすればよいですか?
ありがとうございます!私は私のアプリケーションでこれを実装し、明日あなたに戻ってきます! – Joris416
私のプロジェクトであなたが言ったことを実装しました。私の画像は、作成および/または受信時に小さなサムネイルを生成し、コレクションビューの画像(NUKEを使用)に非同期にロードされ、スクロールがスムーズになります。あなたは、私がこのことを心配することなくプロジェクトを続けることができるように、私は助けてくれました。 – Joris416