iOS 图片加载方法
来源:互联网 发布:java开发工程师工资水平 编辑:程序博客网 时间:2024/05/16 12:20
(1)最简单的下载,显示图片的方法:
- UIImageView *imageView = [[UIImageView alloc] initWithFrame:[self.view bounds]];
- imageView.image = [self loadImageFromUrl:@"http://storage.live.com/items/72A00BF5A838647C!1616?filename=meinv004.jpg"];
- [self.view addSubview:imageView];
- -(UIImage*)loadImageFromUrl: (NSString*)url
- {
- NSURL *imageUrl = [NSURL URLWithString:url];
- NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
- UIImage *image = [UIImage imageWithData:imageData];
- return image;
- }
这种最简单的图片加载方式阻塞了main线程. 使得流程不能流畅进行.
(2)开辟线程来解决这个问题.
- // set imageview
- UIImageView *imageView = [[UIImageView alloc] initWithFrame:[self.view bounds]];
- imageView.backgroundColor = [UIColor yellowColor];
- imageView.tag = imageView_tag;
- [self.view addSubview:imageView];
- // load image in background
- NSString *url = IMAGE_URL;
- [self performSelectorInBackground:@selector(loadImageFromUrl:) withObject:url];
- -(void)loadImageFromUrl: (NSString*)url {
- NSURL *imageUrl = [NSURL URLWithString:url];
- NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
- [self performSelectorOnMainThread:@selector(updateImageView:) withObject:imageData waitUntilDone:NO];
- }
- -(void) updateImageView:(NSData*) data {
- UIImageView *imageView = (UIImageView *)[self.view viewWithTag:imageView_tag];
- imageView.image = [UIImage imageWithData:data];
- }
并且只能在main线程中设置UI的内容, 所以代码量增加了较多. 代码量暂且不管, 这里还有一个比较严重的问题就是每次都要加载图片,
使用SDWebImage:
- #import <SDWebImage/UIImageView+WebCache.h>
- [imageView setImageWithURL:[NSURL URLWithString:[_objects objectAtIndex:indexPath.row]]
- placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
*下载和缓存图片.
*相同的url不会被重复下载.
*坏的url不会一直请求.
使用HJCache:
- // 目前HJCache不支持ARC, 所以这是个问题.
-----------------------------------------------------------------------------------------------------------------
(二)多线程初步实现TableView的图片显示(之前用第三库老是不稳定) 这个算是比较满意的.
------------------------------------------------------------------------------------------------------------------------
- @interface c:NSOperation
- @property NSString *url;
- @property NSString *imageName;
- @property UIImage *image;
- @property UIImageView *delegate;
- -(void) main;
- -(id) initWith:(NSString *)url imageName:(NSString *)imageName delegate:(UIImageView *)delegate;
- @end
- @implementation c:NSOperation
- @synthesize url = _url,imageName=_imageName, image=_image, delegate=_delegate;
- -(id) initWith:(NSString *)url imageName:(NSString *)imageName delegate:(UIImageView *)delegate{
- if (self = [super init]) {
- self.url = url;
- self.imageName = imageName;
- self.delegate = delegate;
- }
- return self;
- }
- -(void) main{
- //
- NSString *cachefile = [NSTemporaryDirectory() stringByAppendingPathComponent: self.imageName];
- NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.url]];
- [data writeToFile:cachefile atomically:YES];
- //
- self.image = [UIImage imageWithData:data];
- [self performSelectorOnMainThread:@selector(u) withObject:nil waitUntilDone:NO];
- }
- -(void)u{
- [self.delegate setImage:self.image];
- }
- queue = [[NSOperationQueue alloc] init];//这是成员队列的实例化
设置TableView cell中的图片:
- NSString *filename = [NSString stringWithFormat:@"%d", indexPath.row];
- NSString *cachefile = [NSTemporaryDirectory() stringByAppendingPathComponent: filename];
- UIImage *image = [UIImage imageWithContentsOfFile:cachefile];
- if (image) {
- cell.imageView.image = image;
- } else {
- c *o = [[c alloc] initWith:[_objects objectAtIndex:indexPath.row] imageName:[NSString stringWithFormat:@"%d",indexPath.row] delegate:cell.imageView];
- [queue addOperation:o];
- cell.imageView.image= [UIImage imageNamed:@"placeholder.png"];
- }
0 0
- iOS 图片加载方法
- iOS异步加载图片方法
- iOS加载图片imageNamed方法还是imageWithContentsOfFile
- iOS加载图片的方法及区别
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 根据不同的系统版本加载不同图片方法
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
- iOS 加载图片方法imageNamed 与 imageWithContentsOfFile 比较
- iOS异步加载图片
- iOS延时加载图片
- 用第三方库加载缓存图片
- SP2010开发和VS2010专家"食谱"--第三章节--高级工作流
- 模块管理常规功能自定义系统的设计与实现(11--Grid导航设计初步[1])
- 有关容器的知识点个人总结
- Linux 下摄像头视频采集与显示
- iOS 图片加载方法
- 【软考】(四)原码、反码、补码
- 使用SimpleDateFormate将date类型与String类型相互转换
- 我是个程序员 大学刚毕业去一家公司面试
- C++primer中类(一)
- 快速排序代码
- cocos2d-x 3.0正式版 vs2013配置
- JSP页面乱码问题解决
- SP2010开发和VS2010专家"食谱"--第三章节--高级工作流(1)--创建自定义活动