日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EGOImageView 解析

發布時間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EGOImageView 解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

在看EGOImageLoader源碼的時候首先個人感覺要先理解里面的幾個概念

1.inline 開頭的函數表示內聯函數。作用是用函數名直接代替表達式,也就是說執行到這一行代碼的時候不會去調用函數,而是直接執行函數體。同樣也有一定限制,那就是函數體不能太復雜,不能有循環和開關語句。最適合就是取值,而在EGOImageLoader這個框架中就是根據URL生成一個key返回。

inline?static?NSString* keyForURL(NSURL* url, NSString* style) {

?????if(style) {

???????????return [NSStringstringWithFormat:@"EGOImageLoader-%u-%u", [[url description] hash], [style hash]];

?????} else {

????? ?????return [NSStringstringWithFormat:@"EGOImageLoader-%u", [[url description] hash]];

?????}

}

********hash的作用是返回一個全局唯一的數字

2.需要了解的是EGO用的是觀察者模式來回調函數,也就是說在調用imageForURL方法的時候會根據URL創建屬于這個圖片的專屬通知,當加載完成后會發出通知,image會在notification的userinfo里面存著,并以object的形式伴隨通知發過去。


****************************************************************


使用EGOImageView,

1.創建對象

imageView = [[EGOImageViewalloc] initWithPlaceholderImage:[UIImageimageNamed:@"placeholder.png"]];

imageView.frame = CGRectMake(4.0f, 4.0f, 36.0f, 36.0f);

[self.contentViewaddSubview:imageView];

2.把URL賦給imageURL這個屬性

imageView.imageURL = [NSURLURLWithString:flickrPhoto];

3.在賦給這個屬性的時候會自動調用屬性的set方法,- (void)setImageURL:(NSURL *)aURL ;

在這個方法里,用注釋的形式寫出來

? ? ?if(imageURL) {

??????? //注銷兩個通知

????? ? [[EGOImageLoadersharedImageLoader] removeObserver:selfforURL:imageURL];

??????? //引用計數減一并置空

????? ??[imageURLrelease];

????? ? imageURL = nil;

?????}


?????if(!aURL) {

??????? //設置默認圖片

????? ? self.image = self.placeholderImage;

???? ? ?imageURL = nil;

??? ???return;

?????} else {

??????? //引用計數加一并且賦給imageURL

???? ? ?imageURL = [aURL retain];

?????}


?????[[EGOImageLoadersharedImageLoader] removeObserver:self];

? ? ? ? ?//調用loader的方法來根據URL加載圖片

? ? ?UIImage* anImage = [[EGOImageLoader?sharedImageLoader] imageForURL:aURL shouldLoadWithObserver:self];

? ? ?//如果緩存有側會立刻返回,如果緩存沒有則會先設置默認圖片,當加載圖片完畢的時候會以通知的方法進行回調

?????if(anImage) {

??????????self.image = anImage;


??????????// trigger the delegate callback if the image was found in the cache

??????????if([self.delegaterespondsToSelector:@selector(imageViewLoadedImage:)]) {

??????????[self.delegateimageViewLoadedImage:self];

??????????}

?????} else {

??????????self.image = self.placeholderImage;

?????}

4.通知回調imageLoaderDidLoad這個方法

- (void)imageLoaderDidLoad:(NSNotification*)notification {

if(![[[notification userInfo] objectForKey:@"imageURL"] isEqual:self.imageURL]) return;


?????UIImage* anImage = [[notification userInfo] objectForKey:@"image"];

?????self.image = anImage;

??????????//這個方法會調用drawrect的方法

??????????[selfsetNeedsDisplay];


?????if([self.delegaterespondsToSelector:@selector(imageViewLoadedImage:)]) {

??????????[self.delegateimageViewLoadedImage:self];

?????}

}

5.在這個類最重要的方法就是?[[EGOImageLoader?sharedImageLoader]?imageForURL:aURL?shouldLoadWithObserver:self];

這個方法了,第一個是傳URL,第二個是傳觀察者的對象。通過這個方法來加載圖片,成功后會調用委托方法- (void)imageLoaderDidLoad:(NSNotification*)notification ;









轉載于:https://my.oschina.net/sunqichao/blog/94506

總結

以上是生活随笔為你收集整理的EGOImageView 解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。