SDWebImage和AFNetworking这样的库添加了基于异步加载的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的缩放比例?
基本上,当我不知道它时,我如何使用框架或尺寸的任何概念?有没有办法在加载图像时刷新所有这些?
答案 0 :(得分:0)
重新布局滚动查看所有子视图将花费很多。您想要的效果必须取决于服务器上的数据,您可以在下载之前获取图片大小。有两种主要方法:
使用大小,您可以使用默认图像布局scrollView,然后异步加载,并在下载完成后更新图像。
希望可以帮到你!