0

iPhone アプリケーションで Web から画像を読み込んでいます。テーブルセルの画像ビューにこの画像を使用しています。アプリケーションの起動後数秒ですべての画像が完全にロードされます。しかし、テーブルのスクロールはスムーズではありません。遅延があります。スクロールはジェスチャの数秒後に行われます。そしてジャークがあります。私はこのコードを使用しています

UIImage *imagefromWeb = [UIImage imageWithData:[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]]];
        CGSize newSize= CGSizeMake(45.0,45.0);
        UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
        [imagefromWeb drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        cell.imageView.image=newImage;
4

4 に答える 4

2

画像を同期的にロードしているため、画像の非同期ダウンロードのために次のコードを試してみてください。

        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,  0ul);
    dispatch_async(queue, ^{

        NSURL *imageURL=[NSURL URLWithString:urlString];
        NSData *imageData=[NSData dataWithContentsOfURL:imageURL];
        dispatch_sync(dispatch_get_main_queue(), ^{
            CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
            cell.imageView.image=[UIImage imageWithData:imageData];
            [cell setNeedsLayout];

        });
    });
于 2012-12-31T04:22:04.463 に答える
2

「sdwebimage」であるuiimageviewカテゴリを使用すると、問題が解決することを願っています。

于 2012-12-31T04:30:19.693 に答える
1

URL からの画像の読み込みに遅延読み込みを使用できます。次のサンプル リンクを参照してください。

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

それがあなたを助けることを願っています.....

于 2012-12-31T04:24:16.123 に答える
1

このコード :[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]アプリケーションがハングします。dataWithContentsOfURLメソッドは同期呼び出しであるためです。このような同期呼び出しをメイン スレッドで呼び出すことはありません。UI が応答しなくなります。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    UIImage *imagefromWeb = [UIImage imageWithData:[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]]];
    CGSize newSize= CGSizeMake(45.0,45.0);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [imagefromWeb drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    dispatch_async(dispatch_get_main_queue(), ^{
        cell.imageView.image=newImage;
   });

});

画像を tableView にロードしてキャッシュするためのオープンソース ライブラリが多数あります。以下を確認してください。

  1. HJキャッシュ
  2. SDWebImage
  3. LazyTableImages
于 2012-12-31T04:24:21.107 に答える