1

要するに、以前にキャッシュされた画像を A​​FNetworking の UIImageView カテゴリのプレースホルダーとして使用する方法を探しています。

- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest 
          placeholderImage:(UIImage *)placeholderImage 
                   success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
                   failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure

ユースケースの例:

PostAPI 応答からデータを入力するという名前のモデルがあります。

@interface Post : NSObject
    @property ... NSString *smallImagePath;
    @property ... NSString *largeImagePath;
    @property ... NSString *description;       
@end

最初の ViewController は、すべてのオブジェクトのサムネイルのグリッド (smallImagePath プロパティを介して取得) を表示しPostます。サムネイルをタップすると DetailViewController に移動し、最終的に大きな画像が説明とともに表示されます。

既に小さいサムネイルをダウンロードしてキャッシュしているので、大きい画像がダウンロードされるのを待つ間、プレースホルダーとして使用したいと思います。この時点では、AFImageCache は公開されていないため、アクセスする方法がわかりません。

私が考えたことの 1 つは、引数として渡される UIImage を成功ブロックに格納することです。

// add property to Post model
@property ... UIImage *smallImage;

success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    [self.post setSmallImage:image];
}

そして、大きな画像をダウンロードする際に、その画像をプレースホルダーとして直接使用できます。

ただし、多数のUIImageへの参照を保持することで、これがメモリフットプリントに顕著な/悪影響を与えるかどうかはわかりません。もっと良い方法を考えられますか?

4

1 に答える 1

0

画像をモデルのプロパティとして保存するという当初のアイデアに行き着きました。そうすれば、大きな画像の読み込み中にプレースホルダーを宣言する必要がある場合は、そのプロパティにアクセスするだけです。パフォーマンスは素晴らしかったです。

于 2012-09-11T06:22:38.207 に答える