1

base64 でエンコードされた文字列で画像を非同期にダウンロードする必要があるアプリがあります (サーバーは base64 でエンコードされた形式で画像を返します)、私は AsyncImage ビューを使用していますが、AsyncImageView ライブラリは非同期にダウンロードする URL のみを受け入れるようです。これについてどうすればよいか考えている人は、一度にすべての画像をダウンロードし、そのエンコードされた文字列をに渡すことができます

   [self.imageView loadImageFromURL:[NSURL URLWithString:[EncodedString]]];

ただし、すべての画像がUIThreadにダウンロードされるため、これは意味がありません。助けてください。ありがとう..!!

4

1 に答える 1

1

Cocoa Helpersを調べる必要があります。これには、非同期読み込み用の SimpleHTTPLoader と、まさに必要なことを行う ImageViewCached があります。imageView ではなく ImageViewCached を作成し、その URL を設定するだけです。それはあなたのために残りを行います。

ただし、自分のやり方でやりたい場合:

以下のコードが正しいことを保証するものではありませんが、全体的なアイデアは次のとおりです (実際のコードから取得し、タスクに対応するように書き直しました。base64 のデコードには cocoa ヘルパーを使用しました。独自の方法を使用してもかまいません。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{    
  NSString *query = [NSString stringWithFormat:@"site.example/image.jpg"];
  NSString *data = [[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] autorelease];
  theImage = [UIImage imageWithData:(rfc::from_base64(data))]
    dispatch_sync(dispatch_get_main_queue(), ^{
        self.imageview.image = theImage;}
    });
});  

PS base64 でエンコードされた画像の場合は、画像を読み込んでデコードするために ImageViewCached を変更する必要があります。

于 2012-06-15T15:36:12.977 に答える