これを行うために私が見つけた最良の方法は、SDWebImageManagerクラスを使用することです。次に、ViewControllerまたはその他のクラスがSDWebImageManagerDelegateプロトコルに準拠する必要があります。
SDWebImageManager *manager = [SDWebImageManager sharedManager];
UIImage *cachedImage = [manager imageWithURL:url];
if (cachedImage) {
[button setImage:cachedImage];
// stop or remove your UIActivityIndicatorView here
}
else {
[manager downloadWithURL:url delegate:self];
}
画像がダウンロードされると、デリゲートメソッドが呼び出されます。
- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image {
[button setImage:image];
// stop or remove your UIActivityIndicatorView here
}
画像のダウンロード中にエラーが発生した場合のデリゲートメソッドもあります
- (void)webImageManager:(SDWebImageManager *)imageManager didFailWithError:(NSError *)error {
// Handle error here
}
複数のボタンがある場合、画像のダウンロード後にどの画像がどのボタンに属するかを判断する際に問題が発生する可能性があります。この場合、上記のようにダウンロードを処理してから独自のイメージを更新するボタンサブクラスが必要になる場合があります。
お役に立てば幸いです。