异步下载图片小项目中遇到的问题总结
来源:互联网 发布:网络直播平台搭建 编辑:程序博客网 时间:2024/05/01 15:00
1.下载的图片大小和UITableViewCell默认的图片大小不匹配的时候,要对图片大小进行调整,方法如下:
2,从xml文件中读取的图片URL地址必须要经过处理才能下载图片,去掉空格和新行字符,方法:
//appImageData是从网上下载的图片的数据,转化为UIImage UIImage *image = [[UIImage alloc]initWithData:self.appImageData]; //判断如果图片的大小和要求的大小不符合的话执行 if (image.size.width != kAppIconSize ||image.size.height != kAppIconSize) { //创建期望的大小 CGSize itemSize = CGSizeMake(kAppIconSize, kAppIconSize); //开始图像上下文,上下文的大小就是期望的大小 UIGraphicsBeginImageContext(itemSize); //把图片画在期望的大小上 CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); [image drawInRect:imageRect]; //从上下文中取得上下文的图片,就是想要的图片大小 self.appRecord.appImage = UIGraphicsGetImageFromCurrentImageContext(); //结束上下文 UIGraphicsEndImageContext(); }
2,从xml文件中读取的图片URL地址必须要经过处理才能下载图片,去掉空格和新行字符,方法:
//必须要进行字符串处理,要不然下载不了图片 NSString *str = [workingPropertyString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
3,NSXMLParser用法
当从XML文件中找到一个标签时就调用这个方法,在这个方法中初始化model
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ if([elementName isEqualToString:kEntryStr]){ self.appEntry = [[[AppRecord alloc]init]autorelease]; }}
当找到标签的内容时调用:-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[self.workingPropertyStringappendString:string];
}
用一个字符串记录标签的内容。
标签结束的时候调用:
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{}在这个函数中进行判断,然后对model进行处理。if ([elementName isEqualToString:kNameStr]) { self.appEntry.appName = str; } else if([elementName isEqualToString:kImageURLStr]){ self.appEntry.appImageURL = str; }4.如果model中已经有了图片直接赋值,如果没有,用startDownload方法去网上下载,记住要有个“占位”的图片。
if (!record.appImage) { [self startDownloadIcon:record forIndex:indexPath]; cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"]; } else{ cell.imageView.image = record.appImage; }5,进行解析大的xml文件的时候要用多线程,要不会有界面假死现象NSOperationQueue线程池,NSOperation代表一个线程,把一个线程加入线程池中执行:
queue = [[NSOperationQueue alloc]init]; ParseOperation *parser = [[ParseOperation alloc]init] [queue addOperation:parser];-(void)main{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; if (![self isCancelled]) { self.completionHandler(self.appEntriesArr); } [pool release];}上面的main方法是线程执行的main方法,其中调用主线程传给它的代码块。void (^ArrayBlock)(NSArray *) completionHandler;completionHandler就是下面的代码块。就是说一个线程执行完自己的操作后可以调用主线程的方法,传入主线程要用的东西。^(NSArray*appList){ dispatch_async(dispatch_get_main_queue(), ^{ [self handleLoadedApps:appList]; }); }
- 异步下载图片小项目中遇到的问题总结
- 项目中遇到的小问题,总结。敲响警钟!
- 项目过程中遇到的问题及小知识点总结
- 项目中遇到的一些小问题
- 项目中遇到的小问题
- 项目过程中遇到的小问题
- 项目中遇到的一些小问题
- 项目中遇到的一些小问题
- 一些项目中遇到的小问题
- 小程序项目中遇到的问题
- 对第一次项目总结--ssh开发中遇到的小问题总结
- 项目中遇到的问题总结
- 项目中遇到的问题总结
- 项目中遇到的问题总结
- 项目中遇到的问题总结
- 项目中遇到的问题总结
- 项目中遇到的问题总结
- 项目中遇到的问题总结
- 小宝,小宝,我爱你
- 用cobar搭建分布式数据库
- 我指间的刺青是对你的誓言
- poj 1717 Dominoes
- HMM,MEMM,CRF模型的比较(转)
- 异步下载图片小项目中遇到的问题总结
- 回归自然
- windows下SVN无法修改日志的问题
- Android图片与屏幕适配问题
- 第二周 任务一 输入并输出一行字符串
- 国力强大并非一味靠“忍”
- 标注偏置问题(Label Bias Problem)和HMM、MEMM、CRF模型比较
- 为什么C和C++牛人多?
- javascript instanceof