图片加载管理

图片加载的两种方式

1、[UIImage imageNamed:nil];
图片加载后一直在内存中,知道程序结束才会被释放。(速度快,但耗内存)

2、从图片路径加载,不用时会被释放,要用时重新加载。(省内存,但速度慢)

NSString*path = [[NSBundle mainBundle]pathForResource:@'"图片的名字"ofType:@"文件类型"];
UIImage*image = [UIImage imageWithContentsOfFile:path];
UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
[self addSubView: imageView];

上面的第二种方式,虽然可以释放掉,但我们要告诉人家什么时候释放。也就是说,当前显示页面不是这个view时,我们便将它释放掉:

//离开界面时,释放对象
- (void)viewWillDisappear:(BOOL)animated{
    [imageView removeFromSuperview];
    imageView = nil;
}

再次进入这个view时,将移除掉的UIImageView再次添加进来

- (void)viewDidAppear:(BOOL)animated{
   [self addSubView: imageView];
}

图片压缩(重新绘图)

为UIImage添加分类方法

//缩放到指定宽度
- (UIImage *)compressImage:(UIImage *)sourceImage toTargetWidth:(CGFloat)targetWidth {
//获得源文件的尺寸
 CGSize imageSize = sourceImage.size;
 CGFloat width = imageSize.width;
 CGFloat height = imageSize.height;
//根据比例计算缩放后的高度
 CGFloat targetHeight = (targetWidth / width) * height; 

//UIGraphicsBeginImageContext:创建一个基于位图的上下文(context),并将其设置为当前上下文(context)。
 //UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight)); (这个出来的图很模糊)
//无损压缩
UIGraphicsBeginImageContextWithOptions(CGSizeMake(targetWidth, targetHeight),0,[[UIScreen mainScreen] scale]);

//drawInRect  重新绘图,UIView的绘图上下文属于当前图形上下文
 [sourceImage drawInRect:CGRectMake(0, 0, targetWidth, targetHeight)]; 

//从当前上下文中获取一个UIImage对象
 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 

//关闭图形上下文
 UIGraphicsEndImageContext();

 return newImage;
}

参考文献
1、 UIGraphicsBeginImageContext系列知识
2、IOS 多个UIImageView 加载高清大图时内存管理
3、iOS图片压缩处理
4、使用 drawInRect 绘图时丢失清晰度解决方法
5、drawInRect: losing Quality of Image resolution
6、iOS绘图详解
7|iOS绘图教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,301评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,659评论 25 709
  • 眼前一缕模糊的朦胧,坠下千丝爱。 ——题记致...
    泯湮0343阅读 376评论 0 4
  • 拥有健康的身体,能更好的支撑你的心灵、梦想、在这个世界上更好的生存下去!《囚徒健身》保罗.威得根据他的亲身经历...
    好沐沐阅读 164评论 0 0
  • 制作.a静态库 拿MJExtension来做🌰 1. 新建库工程 2 删除其他文件,添加需要制作的文件 3 暴露头...
    WeekDiffculty阅读 352评论 0 0