在使用SDWebImage或UIImageView + AFNetworking等异步加载库时,如何在UIImageView的框架中工作?

时间:2014-02-18 04:19:52

标签: ios objective-c uiimageview afnetworking sdwebimage

SDWebImageAFNetworking这样的库添加了基于异步加载的URL在image上设置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的缩放比例?

基本上,当我不知道它时,我如何使用框架或尺寸的任何概念?有没有办法在加载图像时刷新所有这些?

1 个答案:

答案 0 :(得分:0)

重新布局滚动查看所有子视图将花费很多。您想要的效果必须取决于服务器上的数据,您可以在下载之前获取图片大小。有两种主要方法:

  1. 处理网址:http://xxx.xx.xx.pic_200 * 150,200 * 150是图片尺寸
  2. 服务器返回添加大小数据。 {@“width”:200,@“height”:150}
  3. 使用大小,您可以使用默认图像布局scrollView,然后异步加载,并在下载完成后更新图像。

    希望可以帮到你!