2014-02-18 24 views
0

SDWebImageAFNetworking這樣的庫可以基於異步加載的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的縮放比例?

基本上,當我還不知道它時,我該如何使用框架或尺寸的任何概念?有沒有辦法刷新圖像加載時的所有這些?

回答

0

中繼滾動查看所有子視圖將花費很多。您需要的效果必須取決於來自服務器的數據,在降級之前您可以從中獲取圖片大小。有多種款式,主要有兩個方法:

  1. 處理網址:http://xxx.xx.xx.pic_200 * 150,200 * 150的圖片大小
  2. 服務器返回添加尺寸數據。 {@「width」:200,@「height」:150}

使用大小,您可以使用默認圖像佈局scrollView,然後異步加載,並在下載完成時更新圖像。

希望能幫助你!

+0

不幸的是,我沒有控制服務器的後端。 –

相關問題