1

大きな画像をたくさん読み込むアプリがあります。それらを遅延ロードすると、画像がロードされた後でも、画面から指を離すまでセルはそれらをロードしません。downloadImageForVisiblePathsメソッドで関数を呼び出していますが、これとは別に、のメソッドで画像を次のように設定していUIScrollViewDelegateます。scrollViewDidEndDraggingscrollViewDidEndDeceleratingUITableViewcellForRowAtIndexPath

 - (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 などのアプリで画像が読み込まれる方法に似ています。

どんなポインタでも大歓迎です。

4

1 に答える 1

2

のすべてのコードが含まれていないため、わかりにくいdownloadImageForIndexPathですが、バックグラウンド スレッドからセルに画像を割り当てているようです (バックグラウンド スレッドから UI コントロールに触れないでください)。また、セルを直接更新する場合は、呼び出す必要はありませんreloadData

テーブルビューにリモート画像を表示するためにSDWebImageを使用することもお勧めします。

于 2013-09-30T12:27:40.193 に答える