上次在《iOS學習筆記46——圖片非同步載入之SDWebImage》中介紹過一個開源的圖片非同步載入庫,今天來介紹另外一個功能類似的EGOImageLoading,看名字知道,之前的一篇學習筆記《IOS學習筆記34—EGOTableViewPullRefresh實現下拉重新整理》中介紹的開源項目是同一個作者。和SDWebImage不同,EGOImageLoading是實現了一個自訂的EGOImageView,使用上和UIImageView非常類似,同時也實現了自動緩衝和緩衝手動清理的功能。SDWebImage是在UIImageView中添加了一個類別,使用起來好像是使用內建的方法一樣,而EGOImageView就完全是一個自訂實現的圖片載入組件。這是Github的項目地址:https://github.com/enormego/EGOImageLoading
一、配置工程
到Github頁面clone下項目後,裡面有個Demo工程,可以自行運行下看看,然後將下載包中的EGOImageLoading拖拽到自己的工程中,並選中Copy····拷貝到項目後確定。這時可以Command+B編譯一下,如果工程使用了ARC那麼會報錯,這時選中工程並選擇Biuld Pases,為Compile Sources下的EGO開頭的檔案加上配置-fno-objc-arc()
這時再Command+B就會看到編譯通過了,這就說明項目整合成功了!
二、基本使用
使用起來也很簡單,我們這個Demo來實現一個自訂Cell的UITableView列表並非同步載入每個Cell的圖片顯示,單擊每個Cell進入子頁面並顯示單獨的圖片。
首先我們需要實現一個繼承UITableViewCell的自訂cell,標頭檔如下,聲明一個EGOImageView用於顯示圖片,一個UILabel用於顯示該圖片的URL:
#import <UIKit/UIKit.h>#import "EGOImageView.h"@interface ImageCell : UITableViewCell{@private EGOImageView *egoImageView; UILabel *label;}//在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中調用為圖片組件載入圖片顯示-(void)setImageWithURL:(NSString *)imageURL;@end
在.m檔案中我們初始化這兩個組件並實現setImageWithURL:方法:
#import "ImageCell.h"@implementation ImageCell- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { egoImageView = [[EGOImageView alloc] initWithPlaceholderImage:[UIImage imageNamed:@"placeholder.png"]]; egoImageView.frame = CGRectMake(5, 5, 65, 65); [self.contentView addSubview:egoImageView]; label = [[UILabel alloc] initWithFrame:CGRectMake(78, 20, 220, 30)]; label.textColor = [UIColor blackColor]; [self.contentView addSubview:label]; } return self;}-(void)setImageWithURL:(NSString *)imageURL{ [egoImageView setImageURL:[NSURL URLWithString:imageURL]]; label.text = imageURL;}
其中EGOImageView初始化方法中的palaceholder是還沒載入完或載入失敗時顯示的佔位圖。到這裡自訂的UITableViewCell就實現完了,接著到UITableViewController中實現頁面展示和功能(關鍵代碼):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; ImageCell *cell = (ImageCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[ImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } //imgURLs為儲存圖片URL地址的NSArray數組 [cell setImageWithURL:[imgURLs objectAtIndex:indexPath.row]]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell;}
我們可以看到,調用自訂的ImageCell中的setImageWithURL:方法即完成了對圖片的非同步載入,是不是很簡單,另外,使用EGOCaceh也可以實現對緩衝的釋放:
//清理緩衝-(void)clearCacheButton{ [[EGOCache currentCache] clearCache]; [self.tableView reloadData];}
最後讓我們來看看Demo的效果:
需要源碼的同學可以到這裡下載,裡面有完整的實現:下載
加入我們的QQ群或公眾帳號請查看:Ryan's
zone公眾帳號及QQ群
同時歡迎關注我的新浪微博和我交流:@唐韌_Ryan
覺得這篇文章對你有用就頂我一下吧!