0

サーバーからサムネイルをダウンロードして、各セルに表示しようとしています:

// displaying image...
dictionary = [newsFeed objectAtIndex:indexPath.row];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[dictionary objectForKey:@"image"]]]];
cell.imageView.image = [image imageScaledToSize:CGSizeMake(55, 55)];    

しかし、画像をダウンロードして表示した後、テーブル ビューのスクロールが遅くなります。

4

7 に答える 7

2

私はあなたがこれを言おうとしていると思います。

NSURL* url = [NSURL URLWithString:@"http://www.YourImageUrl.com"];
NSURLRequest* request = [NSURLRequest requestWithURL:url];


[NSURLConnection sendAsynchronousRequest:request
        queue:[NSOperationQueue mainQueue]
        completionHandler:^(NSURLResponse * response,
            NSData * data,
            NSError * error) {
    if (!error){
            UIImage* image = [[UIImage alloc] initWithData:data];
        // Now workout with the image
    }

}];

これにより、非同期呼び出しが行われ、テーブルビューがロードされた後に画像がロードされます。つまり、画像のロードが完了すると画像が表示されますが、テーブルビューをロードする必要があるときにテーブルがロードされます。

于 2013-10-18T11:11:49.353 に答える
1

このように直接使用します

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[dictionary objectForKey:@"image"]]]];

メインスレッドを使用するため、画像をダウンロードする前にスクロールすることはできません.

画像をダウンロードする場所にこれらのコーディング行を挿入します

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request   delegate:self];
    received_data = [[NSMutableData alloc]init];
    [connection start];

これらの行は、これらのデリゲートをトリガーしてデータをダウンロードします。

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [received_data setLength:0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [received_data appendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //Use your download image
    imageView.image = [UIImage imageWithData:received_data];    
}
于 2013-10-23T07:09:16.350 に答える
0

より便利に画像をダウンロードするには、EGOImageLoader/EGOImageView を使用してください。このリンクからこのクラスをダウンロードしてください。

https://github.com/enormego/EGOImageLoading

于 2013-10-23T07:13:50.303 に答える
0

AFNetworking を使用すると、使用感が向上します。プロジェクトの一部として、一時的な画像を挿入するカテゴリがありUIImageView、バックグラウンド スレッドに切り替えて実際の画像をダウンロードします。

これにより、イメージのダウンロードでメイン スレッドがロックされなくなります。イメージがダウンロードされると、一時イメージがスワップアウトされます。

UIImageViewこれは、カテゴリAFNetworking クラッシュ コースの使用に関するいくつかの指針を含む素晴らしいチュートリアルです。

于 2013-05-13T21:02:03.763 に答える
0

私はここに答えを書きました:

https://stackoverflow.com/a/14624875/1375695

これは、画像がバックグラウンドでダウンロードされている間、Grand Central Depatch を使用してテーブルをスムーズにスクロールし続ける方法を説明しています。その答えは、サードパーティのライブラリの使用を義務付けていません。Andrew と Flexaddicted が述べたように、解決策を提供するライブラリがありますが、フードの下で何が必要かを理解できるように読む価値があるかもしれません。

私が提案したソリューションでは、同期メソッドを使用して実際にネットワークからデータを取得できることに注意してください。

    UIImage *image = [UIImage imageWithData:
                      [NSData dataWithContentsOfURL:
                       [NSURL URLWithString:
                        [dictionary objectForKey:@"image"]]]];

非同期バックグラウンド スレッドで呼び出されるように。

于 2013-05-13T23:17:14.130 に答える