iOS tableView的圖片緩衝非同步載入
1.建立一個viewController..h檔案實現UIScrollViewDelegate和UITableViewDelegate,並聲明ICTableViewDelegate(用來實現圖片有緩衝則載入圖片,無緩衝則請求圖片並緩衝下來再載入) .h檔案如下
#define KimageKey @"photoFileUrl" ///為數組中每個item中存放圖片URL的key名字#define KidKey @"activityId" ///為數組中每個item的id 用於緩衝之用#import @protocol ICTableViewDelegate@required -(void)cellImageDidLoad:(NSIndexPath *)indexPath image:(NSMutableArray *)imageArray;@end@interface ICTableViewController : UIViewController {@public id WQTableVieDelegate; NSMutableArray *tableDataArray; UITableView *wqTable;} @end
.m檔案如下:
- (void)loadCellImage{//方法實現實現圖片有緩衝則載入圖片,無緩衝則請求圖片並緩衝下來再載入 NSArray *indexPathsForLoad = [wqTable indexPathsForVisibleRows]; for (NSIndexPath *item in indexPathsForLoad) { NSInteger rowNumberForCell = item.row; NSLog(@"%li",(long)rowNumberForCell); NSLog(@"%li",(unsigned long)[tableDataArray count]); if (rowNumberForCell >[tableDataArray count] -1) { return; } NSString *imageStr =tableDataArray[rowNumberForCell][@"photoFileUrl"]; NSLog(@"%@",imageStr); NSMutableArray *imageArray = [NSMutableArray array]; if([imageStr length]!=0){ NSArray *photoUrl = [imageStr componentsSeparatedByString:MULTI_FILES_SEPARATOR]; for(int i=0;i然後具體子類繼承這個父類,並實現ICTableViewDelegate代理方法#pragma mark ICTableViewDelegate-(void)cellImageDidLoad:(NSIndexPath *)indexPath image:(NSMutableArray *)imageArray{ EventShowTableViewCell *cell = (EventShowTableViewCell *)[_eventListTableView cellForRowAtIndexPath:indexPath]; if([imageArray count]!=0){ for(int i=0;iCustomPhotoBtn載入圖片封裝的一個控制項 UIImage *thumbImg = [FileTransferHelp thumbnailWithImage:(UIImage *)imageArray[i] size:CGSizeMake(60, 40)]; [photoBtn.imgView setImage:thumbImg]; [cell.contentView addSubview:photoBtn]; }else{ CustomPhotoBtn *photoBtn = (CustomPhotoBtn *)[cell.contentView viewWithTag:(i +1)*10]; UIImage *thumbImg = [FileTransferHelp thumbnailWithImage:(UIImage *)imageArray[i] size:CGSizeMake(60, 40)]; [photoBtn.imgView setImage:thumbImg]; [cell addSubview:photoBtn]; } } } }在子類設定每個cell的內容的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
裡寫下
CustomPhotoBtn *photoBtn = [CustomPhotoBtn customPhotoBtn];//載入圖片封裝的一個控制項 [photoBtn.fileFullName setText:url]; NSString *imageName = [url stringByAppendingString:[NSString stringWithFormat:@".temp"]]; NSLog(@"imageName%@",imageName); NSString *imageDataPath = [NSHomeDirectory() stringByAppendingPathComponent:[@"Library/Caches/" stringByAppendingString:imageName]]//從緩衝中找圖片 NSLog(@"imageDataPath%@",imageDataPath);// [data writeToFile:imageDataPath atomically:YES]; UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:imageDataPath]]; UIImage *thumbImg = [FileTransferHelp thumbnailWithImage:image size:CGSizeMake(60, 40)]; if (thumbImg) { [photoBtn.imgView setImage:thumbImg]; } return photoBtn;