一直加載圖片都是用的SDWebImage這個(gè)框架,今天在加載多張圖片的時(shí)候,程序突然崩潰了氢惋,真是一臉悶逼,找了好久稽犁,最后發(fā)現(xiàn)是加載圖片導(dǎo)致的焰望。于是上網(wǎng)搜索了一下,原來(lái)很多人也遇到了這個(gè)問(wèn)題已亥,按照網(wǎng)上大神提供的方法進(jìn)行了修改熊赖,問(wèn)題就解決了。
修改SDWebImage框架中的UIImage+MultiFormat.m文件虑椎,添加一個(gè)等比壓縮圖片的方法
+(UIImage *)compressImageWith:(UIImage *)image
{
float imageWidth = image.size.width;
float imageHeight = image.size.height;
float width = 640;
float height = image.size.height/(image.size.width/width);
float widthScale = imageWidth /width;
float heightScale = imageHeight /height;
// 創(chuàng)建一個(gè)bitmap的context
// 并把它設(shè)置成為當(dāng)前正在使用的context
UIGraphicsBeginImageContext(CGSizeMake(width, height));
if (widthScale > heightScale) {
[image drawInRect:CGRectMake(0, 0, imageWidth /heightScale , height)];
}
else {
[image drawInRect:CGRectMake(0, 0, width , imageHeight /widthScale)];
}
// 從當(dāng)前context中創(chuàng)建一個(gè)改變大小后的圖片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
// 使當(dāng)前的context出堆棧
UIGraphicsEndImageContext();
return newImage;
}
然后還是在這個(gè)文件中震鹉,在+ (UIImage *)sd_imageWithData:(NSData *)data方法中,對(duì)一些大圖進(jìn)行壓縮
+ (UIImage *)sd_imageWithData:(NSData *)data {
.......
#ifdef SD_WEBP
else if ([imageContentType isEqualToString:@"image/webp"])
{
image = [UIImage sd_imageWithWebPData:data];
}
#endif
else {
image = [[UIImage alloc] initWithData:data];
// 大于300k就對(duì)圖片進(jìn)行壓縮
if (data.length/1024 > 300) {
image = [self compressImageWith:image];
}
......
return image;
}
最后绣檬,還要在SDWebImageDownloaderOperation中足陨,參考文章是在connectionDidFinishLoading方法中修改,但我沒(méi)找到這個(gè)方法娇未,最后實(shí)在- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error這個(gè)方法中進(jìn)行的修改
在下面代碼下方
UIImage *image = [UIImage sd_imageWithData:self.imageData];
添加一下代碼
// 將等比壓縮過(guò)的image在賦在轉(zhuǎn)成data賦給self.imageData
NSData *data = UIImageJPEGRepresentation(image, 1);
self.imageData = [NSMutableData dataWithData:data];
不知我這么改會(huì)不會(huì)有其他的問(wèn)題墨缘,但閃退的問(wèn)題是解決了。以后有修改會(huì)再做補(bǔ)充