iOS學習筆記47——圖片非同步載入之EGOImageLoading

來源:互聯網
上載者:User

上次在《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


覺得這篇文章對你有用就頂我一下吧!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.