Лучший способ сделать это - использовать класс SDWebImageManager. Ваш контроллер представления или какой-либо другой класс затем должен будет соответствовать протоколу 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
}
Если у вас более одной кнопки, у вас могут возникнуть проблемы с определением, к какому изображению относится какая кнопка после загрузки изображения. В этом случае вам может понадобиться подкласс кнопки, который обрабатывает загрузку, как указано выше, а затем обновляет свое собственное изображение.
Надеюсь, это поможет.