0

約 5 つの画像を読み込む画面がありますが、それらは巨大な画像です。今私は

NSURLRequest

そして:

 connectionDidFinishLoading

..各画像がいつロードされるかを知らせるコールバック用。

問題は、画像が 1 つずつポップアップすることです。読み込み中に画像を表示させる方法はありますか?

ありがとう

4

4 に答える 4

2

これを行うために必要なことの根幹は、CGImageSource メソッドとして利用できます。

まず、非同期 NSURLConnection を使用してデータを取得します。受信したデータを NSMutableData オブジェクトに追加すると、データ オブジェクトは完了するまでどんどん大きくなります。

プログレッシブ イメージ ソースも作成します。

CGImageSourceRef imageSourcRef = CGImageSourceCreateIncremental(dict);

こことGoogleで必要な辞書を設定する方法の例がたくさんあります。

次に、データが到着したら、TOTAL データ オブジェクトをこのメソッドに渡します。

CGImageSourceUpdateData(imageSourcRef, (__bridge CFDataRef)data, NO); // No means not finished

次に、画像ソースに画像を要求できます。これは、画像がダウンロードされるときに部分的になります。CGImage を使用すると、UIImage を作成できます。

最終データを取得したら、前回の画像ソースを更新します。

CGImageSourceUpdateData(imageSourcRef, (__bridge CFDataRef)data, YES);

次に、画像ソースを使用して最終的な画像を取得すれば完了です。

于 2012-09-27T23:00:55.647 に答える
1

UIImageViewロード中に表示する、ロード中に不完全なデータでロードできるとは思わない.私はAsyncImageViewUIImagesに行きます .画像を非同期にロードするすべての負担に対処できます.また、すでに追加されています.したがって、よりユーザーフレンドリーになります.UIActivityIndicator

于 2012-09-27T19:38:23.610 に答える
0

ブロックと GCD の dispatch_async メソッドを使用します。

この例を見てください:

//communityDetailViewController.h

@interface communityDetailViewController : UIViewController {

UIImageView *imgDisplay;
UIActivityIndicatorView *activity;

// the dispatch queue to load images
dispatch_queue_t queue;

}

@終わり

//communityDetailViewController.m

- (void)loadImage

{

[activity startAnimating];

NSString *url = @"URL the image";

if (!queue) {
    queue = dispatch_queue_create("image_queue", NULL);
}

dispatch_async(queue, ^{
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
    UIImage *anImage = [UIImage imageWithData:data];

    dispatch_async(dispatch_get_main_queue(), ^{
        [activity stopAnimating];
        activity.hidden = YES;
        if (anImage != nil) {
            [imgDisplay setImage:anImage];
        }else{
            [imgDisplay setImage:[UIImage imageNamed:@"no_image_available.png"]];
        }
    });
});

}

于 2012-09-27T20:15:55.370 に答える