iPhone UITableView异步加载图片 (动态加载图片)
来源:互联网 发布:北京私立汇佳学校 知乎 编辑:程序博客网 时间:2024/05/18 01:03
LazyTableImages 苹果官方的例子
//-----------方法1----------------
//AsyncImageView.h#import <UIKit/UIKit.h>@interface AsyncImageView : UIView { NSURLConnection*connection; NSMutableData*data;}- (void)loadImageFromURL:(NSURL*)url;@end //AsyncImageView.m#import "AsyncImageView.h"@implementation AsyncImageView- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { // Initialization code } return self;}- (void)loadImageFromURL:(NSURL*)url { if(connection!=nil) { [connection release]; } if(data!=nil) { [data release]; } NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; connection= [[NSURLConnection alloc] initWithRequest:request delegate:self]; //TODO error handling, what if connection is nil?}- (void)connection:(NSURLConnection*)theConnection didReceiveData:(NSData*)incrementalData { if(data==nil) { data=[[NSMutableData alloc]initWithCapacity:2048]; } [data appendData:incrementalData];}- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { [connection release]; connection=nil; if([[self subviews]count]>0) { [[[self subviews] objectAtIndex:0] removeFromSuperview]; } UIImageView*imageView= [[[UIImageView alloc]initWithImage:[UIImage imageWithData:data]]autorelease]; imageView.contentMode=UIViewContentModeScaleAspectFit; imageView.autoresizingMask= (UIViewAutoresizingFlexibleWidth||UIViewAutoresizingFlexibleHeight); [self addSubview:imageView]; imageView.frame=self.bounds; [imageView setNeedsLayout]; [self setNeedsLayout]; [data release]; data=nil;}- (UIImage*) image {UIImageView *iv = [[self subviews]objectAtIndex:0];return[iv image];}/*// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect { // Drawing code}*/- (void)dealloc { [connection cancel]; [connection release]; [data release]; [super dealloc];}@end在uitableview 中调用
// Customize the appearance of table view cells.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];}else{AsyncImageView* oldImage = (AsyncImageView*)[cell.contentView viewWithTag:999];[oldImage removeFromSuperview]; }CGRect frame;frame.size.width=150; frame.size.height=75;frame.origin.x=20; frame.origin.y=5;AsyncImageView *asyncImage = [[[AsyncImageView alloc] initWithFrame:frame] autorelease];asyncImage.tag =999;//NSString *strUrl = [imagesArray objectAtIndex:indexPath.row]NSString *strUrl = @"http://merrimusings.mu.nu/archives/images/groundhog2.jpg";NSURL *url = [NSURL URLWithString:strUrl];[asyncImage loadImageFromURL:url];//[cell.contentView addSubview:asyncImage];[cell addSubview:asyncImage];//cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];cell.textLabel.text = @"ok";cell.textLabel.font = font;cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell;}
//--------------方法2-------------
// Customize the appearance of table view cells.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier] autorelease];}[NSThread detachNewThreadSelector:@selector(updateImageForCellAtIndexPath:) toTarget:self withObject:indexPath];UIFont *font = [UIFont fontWithName:@"Helvetica" size:17];//cell.textLabel.text = [dataArray objectAtIndex:indexPath.row];cell.textLabel.text = @"ok";cell.textLabel.font = font;cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell;}- (void)updateImageForCellAtIndexPath:(NSIndexPath *)indexPath{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; UIImage *image = [self getImageForCellAtIndexPath:indexPath]; if (image) { NSLog(@"image ok %d",indexPath.row); } UITableViewCell *cell = [self.tbView cellForRowAtIndexPath:indexPath];CGRect rect;UIImageView *iv = [[UIImageView alloc] initWithFrame:CGRectMake(KNewCollectionImageViewX+5, kTopButtonMargin, KShopCellImageViewWidth, KShopCellImageViewHeight)];iv.tag = KImageViewTag;iv.backgroundColor = [UIColor clearColor];rect = iv.frame;//iv.image = image;[cell addSubview:iv];//cell.imageView.image = image; //[cell.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];[iv performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];[iv release]; //[image release]; [pool release];}-(UIImage *)getImageForCellAtIndexPath:(NSIndexPath *)indexPath{ // id path = [[dataArray objectAtIndex:indexPath.row] objectForKey:@"image"];//id path = [imageArray objectAtIndex:indexPath.row];//id path = @"http://merrimusings.mu.nu/archives/images/groundhog2.jpg";NSString *path = @"http://merrimusings.mu.nu/archives/images/groundhog2.jpg";NSURL *url = [NSURL URLWithString:path];NSData *data = [NSData dataWithContentsOfURL:url];//UIImage *image = [[UIImage alloc] initWithData:data cache:NO]; // NSURL *url = [NSURL URLWithString:path]; //NSData *data = [NSData dataWithContentsOfURL:url]; //UIImage *image = [[UIImage alloc] initWithData:data cache:NO];//UIImage *image = [[UIImage alloc] initWithData:data cache:NO]; UIImage *image = [UIImage imageWithData:data];if (image) {NSLog(@"%@",path);} return image;}
- iPhone UITableView异步加载图片 (动态加载图片)
- iPhone UITableView异步加载图片
- iPhone UITableView异步加载图片
- UITableView 异步加载图片
- UITableView异步加载图片
- UITableView异步加载图片
- UITableView异步加载图片
- UITableView 异步加载图片
- iPhone 异步加载图片
- iphone 异步加载图片
- iphone动态加载图片
- ipad iphone 异步图片加载
- iphone(UITableViewCell)动态加载图片
- iphone(UITableViewCell)动态加载图片
- iphone(UITableViewCell)动态加载图片
- UITableView异步加载图片+缓存
- UITableView 实现异步加载图片之改进
- iOS UITableView中异步加载图片
- Delphi 停靠技术的应用3(两个窗体停靠成PageControl样式, 分页停靠)
- Connection 和 Transaction 对象
- 加入一个多播组(最简单的情况)
- floyd应用心得
- 图解操作系统-取出数据的实际方法
- iPhone UITableView异步加载图片 (动态加载图片)
- java常用类解析八:java字符串与格式化输出
- 小刀——基于Android平台的简易计算器
- C++虚函数表解析(转)
- 竞赛题一例
- 编程题: 写一个Singleton
- POJ2289 Jamie's Contact Groups 二分+最大流匹配
- 再来一个很蛋的C++程序
- 敏捷开发用户故事系列之六:用户故事的产生与组织结构