私は、ファイルがデバイスに保存されているイメージのコレクションを表示する必要があるコレクションビューを持っています。それらはすべて600x600ピクセルですので、バックグラウンドスレッドで非同期にUIImageを作成し、image
のプロパティをメインスレッドのUIImageView
に設定する方が良いと思いました。私は細胞のいずれかのnil
されるがimage
に一度私の(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
方法UICollectionViewCell GCDを使用したデバイスからの非同期イメージの読み込み
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSString *imageName = [NSString stringWithFormat:@"wo-%@", template.fileName];
UIImage *image = [UIImage imageNamed:imageName];
dispatch_async(dispatch_get_main_queue(), ^{
if (image == nil)
{
self.collectionView.backgroundColor = [UIColor redColor];
NSLog(@"image named: %@ in nil!", imageName);
}
cell.imageView.image = image;
});
});
return cell;
すべてでこれを行う場合についてです。再現性がなく、必ずしも同じセル/イメージ名であるとは限りません。私はこれがUIImage imageNamed:
メソッドを使うことと何か関係があるのか、GCDを間違って使っているのだろうかと思いましたか?問題に関するあらゆる考えが評価されるだろう。
は、画像が、アプリケーションのバンドルに同梱されていることを意味します。それらを直接ロードするだけで待ち時間は非常に短くなければなりません(UIImageによってキャッシュされるので、最初のロード後もさらに低くなります)。あなたはまた、デバイスのために最適化されたより小さなバージョンのイメージを発送することを検討することもできます。 gcdコードをスキップし、単にimageNamedを呼び出します: – danh