約 5 つの画像を読み込む画面がありますが、それらは巨大な画像です。今私は
NSURLRequest
そして:
connectionDidFinishLoading
..各画像がいつロードされるかを知らせるコールバック用。
問題は、画像が 1 つずつポップアップすることです。読み込み中に画像を表示させる方法はありますか?
ありがとう
約 5 つの画像を読み込む画面がありますが、それらは巨大な画像です。今私は
NSURLRequest
そして:
connectionDidFinishLoading
..各画像がいつロードされるかを知らせるコールバック用。
問題は、画像が 1 つずつポップアップすることです。読み込み中に画像を表示させる方法はありますか?
ありがとう
これを行うために必要なことの根幹は、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);
次に、画像ソースを使用して最終的な画像を取得すれば完了です。
UIImageView
ロード中に表示する、ロード中に不完全なデータでロードできるとは思わない.私はAsyncImageViewUIImages
に行きます
.画像を非同期にロードするすべての負担に対処できます.また、すでに追加されています.したがって、よりユーザーフレンドリーになります.UIActivityIndicator
ブロックと 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"]];
}
});
});
}