画像ファイルでUiImageを作成するには、次のコードを使用します。
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
URL http://example.com/demo.jpg でUiImageを作成したい場合、どうすればいいですか?
ありがとう
更新
これは3段階のプロセスです。まず、アクセスしようとしているURLを保持するNSURL
オブジェクトを作成します。このURLをNSData
クラスメソッド、+dataWithContentsOfURL:
ネットワーク経由で生データとして画像を取得し、+imageWithData:
データを画像に変換するUIImage
のクラスメソッド。
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
その点に注意してください +dataWithContentsOfURL:
は、同期ネットワーク要求を実行します。これをメインスレッドで実行すると、ネットワークから画像データを受信するまでUIがブロックされます。ベストプラクティスは、バックグラウンドスレッドでネットワークコードを実行することです。 OS 4.0+をターゲットにしている場合、次のようなことができます...
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI
self.imageView.image = [UIImage imageWithData:imageData];
});
});
Swiftで同じコードがどのように見えるかを次に示します。
let image_url = NSURL("http://i.imgur.com/3yY2qdu.jpg")
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let image_data = NSData(contentsOfURL: image_url!)
dispatch_async(dispatch_get_main_queue()) {
// update some UI
let image = UIImage(data: image_data!)
self.imageView.image = image
}
}
Webから画像をロードする場合は、次のライブラリが役立ちます。
https://github.com/rs/SDWebImage
これは、非同期ロードとURLからの画像キャッシュを処理するUIImageView
カテゴリーです。