アプリに UICollectionView があり、各セルは UIImageView といくつかのテキスト ラベルです。問題は、UIImageViews に画像を表示させると、スクロールのパフォーマンスがひどいことです。UITableView のスクロール エクスペリエンスや、UIImageView のない同じ UICollectionView ほどスムーズではありません。
数か月前にこの質問を見つけて、答えが見つかったようですが、RubyMotion で書かれていて、それがわかりません。Xcodeに変換する方法を試してみましたが、NSCacheも使ったことがないのでちょっと難しいです。そこのポスターは、ソリューションに加えて何かを実装することについても指摘しましたが、そのコードをどこに置くべきかわかりません。おそらく、最初の質問のコードを理解していないためです。
誰かがこれを Xcode に変換するのを手伝ってくれるでしょうか?
def viewDidLoad
...
@images_cache = NSCache.alloc.init
@image_loading_queue = NSOperationQueue.alloc.init
@image_loading_queue.maxConcurrentOperationCount = 3
...
end
def collectionView(collection_view, cellForItemAtIndexPath: index_path)
cell = collection_view.dequeueReusableCellWithReuseIdentifier(CELL_IDENTIFIER, forIndexPath: index_path)
image_path = @image_paths[index_path.row]
if cached_image = @images_cache.objectForKey(image_path)
cell.image = cached_image
else
@operation = NSBlockOperation.blockOperationWithBlock lambda {
@image = UIImage.imageWithContentsOfFile(image_path)
Dispatch::Queue.main.async do
return unless collectionView.indexPathsForVisibleItems.containsObject(index_path)
@images_cache.setObject(@image, forKey: image_path)
cell = collectionView.cellForItemAtIndexPath(index_path)
cell.image = @image
end
}
@image_loading_queue.addOperation(@operation)
end
end
最初の質問の質問者が問題を解決したと言った2番目の質問のコードは次のとおりです。
UIImage *productImage = [[UIImage alloc] initWithContentsOfFile:path];
CGSize imageSize = productImage.size;
UIGraphicsBeginImageContext(imageSize);
[productImage drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
productImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
繰り返しますが、それを実装する方法/場所がわかりません。
どうもありがとう。