大きな画像をたくさん読み込むアプリがあります。それらを遅延ロードすると、画像がロードされた後でも、画面から指を離すまでセルはそれらをロードしません。downloadImageForVisiblePaths
メソッドで関数を呼び出していますが、これとは別に、のメソッドで画像を次のように設定していUIScrollViewDelegate
ます。scrollViewDidEndDragging
scrollViewDidEndDecelerating
UITableView
cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
// Code to load reusable custom cell
CustomObject *object = (CustomObject*) [self.tableArray objectAtIndex: indexPath];
if(!object.mainImage){
[self downloadImageForIndexPath:indexPath];
cell.mainImageView.image = [UIImage imageNamed:@"placeholder"];
}else{
cell.mainImageView.image = object.mainImage;
}
return cell;
}
はdownloadImageForIndexPath
次のようになります。
-(void) downloadImageForIndexPath:(NSIndexPath*) indexPath{
UIImage *loadedImage = [[UIImage alloc] init];
// take url and download image with dispatch_async
// Once the load is done, the following is done
CustomCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.mainImageView.image = loadedImage;
CustomObject *object = (CustomObject*) [self.tableArray objectAtIndex: indexPath];
object.mainImage = loadedImage;
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableVIew reloadData];
});
}
どこが間違っているのかわかりません。指が画面上にあるときでも画像を読み込む必要があります。この動作は、Google+、Instagram、Facebook などのアプリで画像が読み込まれる方法に似ています。
どんなポインタでも大歓迎です。