我们的widget长这样:
图片来自网络,通过SDWebImage下载后,给UIImageView赋值,没什么特别的。
问题是这样的:
在iPhone7 iPhone7 plus上,widget有时会无法显示,或者显示"无法加载"。其实这个时候widget已经crash了,如果连接Xcode会弹出这句话:
Program ended with exit code: 0
后来终于发现问题所在,widget不能使用过多内存(其实稍微多一点都不行)。这4张图片都是500左右的分辨率就已经不行了。至少iPhone7上是这样。
解决办法是这样:
每次图片下载后,不要直接将原始图片赋值给UIImageView,这样会有个内存的大幅度上涌。我先将下载的UIImage裁剪到控件合适的大小,然后再赋值给UIImageView。这样就不会出现上面的问题了。
核心代码
- (UIImage *)scaleImageToProperDetectSize:(UIImage *)srcImage{
// 如果图片挺小的,当然不用缩小啦
if (srcImage.size.width <= 270 && srcImage.size.height <= 270) {
return srcImage;
}
// 图片比较大的情况
CGFloat widthScaled = 0;
CGFloat heightScaled = 0;
if (srcImage.size.width > srcImage.size.height) {
widthScaled = 270;
heightScaled = srcImage.size.height * 270 / srcImage.size.width;
} else {
heightScaled = 270;
widthScaled = srcImage.size.width * 270 / srcImage.size.height;
}
UIGraphicsBeginImageContext(CGSizeMake(widthScaled, heightScaled));
[srcImage drawInRect:CGRectMake(0, 0, widthScaled, heightScaled)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}