Библиотеки, такие как SDWebImage и AFNetworking, добавляют возможность установить image
на UIImageView
на основе URL-адреса, который загружается асинхронно, что не позволяет пользователю ждать, пока загружается изображение.Как работать в рамках UIImageView при использовании асинхронной библиотеки загрузки, такой как SDWebImage или UIImageView + AFNetworking?
Для моего использования, я создаю галерею, похожую на Photos.app, но изображения загружаются из URL-адресов. В случае, если галерея говорит, 50 изображений с высоким разрешением я не хочу, чтобы пользователь должен был ждать, пока каждый из них загрузится, прежде чем они смогут просматривать даже первые, поэтому эти библиотеки идеально подходят для моего использования (я загружу первое изображение затем загружается по требованию).
Однако я смущен тем, как показывать изображения в представлении, когда их кадр еще не известен, поскольку изображение еще не загружено. Это было бы проблемой без проблем, если бы каждый из них имел один и тот же фрейм (если они были аватарами, например), но это не так.
В моем случае, я использую UIImageViews следующим образом:
// Create image view
self.imageView = [[UIImageView alloc] initWithImage:image];
self.imageView.userInteractionEnabled = YES;
// Create scroll view
self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
self.scrollView.delegate = self;
self.scrollView.contentSize = self.imageView.bounds.size;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
// Figure out the zoom extremities, as well as the initial zoom level so full image is visible
CGFloat scrollViewWidthRatio = CGRectGetWidth(self.scrollView.bounds)/self.scrollView.contentSize.width;
CGFloat scrollViewHeightRatio = CGRectGetHeight(self.scrollView.bounds)/self.scrollView.contentSize.height;
CGFloat minScale = MIN(scrollViewWidthRatio, scrollViewHeightRatio);
self.scrollView.minimumZoomScale = minScale;
self.scrollView.zoomScale = minScale;
self.scrollView.maximumZoomScale = 1.0;
// Add image view and scroll view
[self.scrollView addSubview:self.imageView];
[self.view addSubview:self.scrollView];
Однако все это, кажется, ломаются, когда нагрузка изображения асинхронно. Каким образом я устанавливаю фрейм, поскольку изображение может быть любого миллиона разных размеров? Что я установил scrollView.contentSize
по той же проблеме? Как рассчитать масштаб масштабирования scrollView?
В принципе, как использовать концепцию рамки или размер, когда я еще не знаю? Есть ли способ обновить все это, когда изображение загружено?
К сожалению, у меня нет контроля над сервером. –