像SDWebImage和AFNetworking這樣的庫可以基於異步加載的URL在UIImageView
上設置image
,因此不會在用戶加載圖像時等待。如何在使用像SDWebImage或UIImageView + AFNetworking這樣的異步加載庫時在UIImageView的框架中工作?
對於我的使用,我創建了一個類似於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的縮放比例?
基本上,當我還不知道它時,我該如何使用框架或尺寸的任何概念?有沒有辦法刷新圖像加載時的所有這些?
不幸的是,我沒有控制服務器的後端。 –