我們有一個頁面布局是這樣的:最上面是一張大圖UIImageView
,中間是一些不定數量的UIButton
小標簽,然后是UITableView
列表頁,但是這個圖片是可有可無的,為了適配頁面,我就想先獲取到圖片,然后根據圖片的大小來創建UIImageView
,然后我就想怎么能先獲取到網絡圖片呢,然后就找到了這個方法[UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
我成功得獲取到了圖片,然后根據圖片來創建UIImageView
,可是愚昧無知的我不知道這個方法是在主線程同步加載圖片的,網絡好的時候是沒有問題的,但是在網絡不好的情況下,會導致整個頁面都特別卡動不了。解決方法如下:
- (void)refreshHeaderView
{
NSURL *url = [NSURL URLWithString:[self.categories firstObject].largePicture];
if (!IsNilOrNull(url.absoluteString)) {
[self.imageViewHeader sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
dispatch_async(dispatch_get_main_queue(), ^{
self.imageViewHeader.height = (image.size.height * WidthScreen) / image.size.width;
self.imageViewHeader.image = image;
[self haveImageView];
});
}];
}else {
[self haveImageView];
}
}