前端時間想詳細的了解下AFNetworking庫,所以想著看看官方的API吧。想想既然看看就做下筆記吧,既然做了筆記為何不試著翻譯一下呢。然后就有了之前的文章《AFNetworking說明書》. 之后突然有時間覺得空閑了,就想著再看一篇API文檔吧。
選中了《SDWebImage說明書》這篇文章。選中這個原因是使用的多,并且評論說代碼風格好。與AFNetworking說明書不分上下。
推薦下自己的文章哈。有興趣的可以看看,當然本人英文菜鳥,翻譯不對的地方,請多多賜教。
涉及到的類,分類和協議需要點擊跳轉到新頁面查看。
這個庫提供一個具有緩存功能的異步圖片下載器。為了方便,我們添加了UI元素的分類,如UIImageView, UIButton, MKAnnotationView。
特性
- 創建分類為UIImageView,UIButton,MKAnnotationView增加網絡圖片和緩存管理。
- 一個異步的圖片下載器。
- 一個具有自動緩存過期處理的異步內存+磁盤的圖片緩存。
- 一個后臺的圖片解壓器。
- 確保相同的URL不會下載多次。
- 確保錯誤的URL不會一次又一次的重試。
- 確保主線程不會被阻塞。
- 性能優化。
- 使用GCD 和 ARC。
支持圖片格式化
- 由UIImage支持的圖片格式,如JPEG,PNG等,包括GIF。
- WebP格式,包含動態WebP(使用WebP子空間)。
要求
- iOS 7.0或以上版本
- tvOS 9.0或以上版本
- watchOS 2.0或以上版本
- OS X10.8或以上版本
- Xcode7.3或以上版本
向后兼容
- iOS5和6版本,使用3.想到3.7.6之間的任意版本。
- 小于iOS5.0的版本,請使用最后的2.0版本。
開始
- 閱讀“Readme文檔”。
- 閱讀“如果使用章節”。
- 閱讀“@CocoaDocs文檔”。
- 閱讀“為何SDWebImage比X好”。
- 從Github下載工程或使用CocoaPods更簡單嘗試SDWebImage樣例。
- 查看“安裝步驟”。
- 閱讀“SDWebImage4.0遷移導向”了解3.x到4.x的變化。
睡在使用
- 找出“誰在使用SDWebImage”并添加你的app到列表中。
交流
- 如果你需要幫助,請使用Stack Overflow。(‘sdwebiamge’標簽)
- 如果你想詢問一般的問題,請使用Stack Overflow。
- 如果有發現一個bug,請新開一個問題。
- 如果你有一個特性請求,請新開一個問題。
- 如果有想投稿,請提交一個pull請求。
怎么使用
Objective-c
#import <SDWebImage/UIImageView+WebCache.h>
...
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
Swift
import SDWebImage
imageView.sd_setImage(with: URL(string: "http://www.domain.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
- 想了解怎么使用這個庫和清晰示例的詳細信息,詳見“怎么使用的詳情”。
動畫圖片(GIF)支持
- 從4.0版本開始,我們依賴FLAnimatedImage來處理我們的動畫圖像。
- 如果你使用cocoapods,添加‘SDWebImage/GIF’到你的podfile文件。
- 使用它,只需確保你使用FLAnimatedImageView代替UIImageView。
- 注意:有一個向后兼容特性,所以如果你任然嘗試加載GIF到UIImageView中,它只會顯示第一幀的靜態圖片。
- 重要:FLAnimatedImage只工作在iOS平臺。在OX X系統,使用NSImageView并設置animates為YES來顯示整個動畫圖片,設置為NO則只顯示第一幀。其他的所有平臺(tvOS,watchOS),我們會退回到上面描述的向后兼容特性。
常見問題
UITableViewCell中使用動態圖片大小
UITableView通過檢測第一張圖片的大小來設置一個單元格。如果你的遠程圖片與你的默認圖片大小不一致,有可能碰到奇怪的圖片變形問題。以下的文章提供了一個解決這個問題的思路:http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/.
處理圖片刷新
SDWebImage默認具有非常強烈的緩存機制。它會忽略HTTP服務器返回中控制頭的所有緩存類型,將無限制的緩存返回的圖片。它意味著你的圖片URLS是靜態的URLS并指向絕不會修改的圖片。如果指向的圖片發生了改變,URL部分也應該相應的修改。
如果你沒有控制你正在使用的圖片服務器,那么當圖片內容發生修改時你不能修改圖片的URL。這種情況以Facebook的頭像URLS為例。這種情況下,你可以使用SDWebImageRefreshCached標簽。這將稍微降低性能但是將遵守HTTP緩存控制頭:
[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
options:SDWebImageRefreshCached];
添加一個進度指示器
在你調用sd_setImageWithURL之前添加以下代碼
[imageView sd_setShowActivityIndicatorView:YES];
[imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
imageView.sd_setShowActivityIndicatorView(true)
imageView.sd_setIndicatorStyle(.Gray)
安裝
一共有3個方法在你的工程中使用SDWebImage:
- 使用CocoaPods
- 使用Carthage
- 通過克隆工程添加到你的倉庫
PODFILE
platfrom :ios, '7.0'
pod 'SDWebImage', '~> 4.0'
如果你在使用Swift,確保添加了use_frameworks!和設置目標版本為iOS 8+:
platform: ios, '8.0'
use_frameworks!
SUBSPECS
現在有4個有效的子模塊:Core,MapKit,GIF和WebP(這意味著你可以只安裝SDWebImage的指定模塊。默認,你只獲取Core模塊,所以如果你需要WebP,你需要指定它)。
Podfile樣例:
pod 'SDWebImage/WebP'
CARTFILE
github "rs/SDWebImage"
通過克隆倉庫安裝
- 詳見“手動安裝”。
在你的源文件中引入頭文件
在你需要使用這個庫的源文件中,引入頭文件:
##import <SDWebImage/UIImageView+WebCache.h>
編譯工程
這點呢,你的工作空間編譯不能有錯誤。如果你有問題,發送你的問題,社區可以幫助你解決它。
作者
- Olivier Poitrey
合作者
- Konstantinos K.
- Bogdan Poplauschi
- Chester Liu
許可
所有源代碼的許可都在MIT許可中。
架構
類說明
- SDImageCache
- SDImageCacheConfig
- SDWebImageDownloadToken
- SDWebImageDownloader
- SDWebImageDownloaderOperation
- SDWebImageManager
- SDWebImagePrefetcher
協議說明
- SDWebImageDownloaderOperationInterface
- SDWebImageManagerDelegate
- SDWebImageOperation
- SDWebImagePrefetcherDelegate
分類說明
- FLAnimatedImageView(WebCache)
- MKAnnotationView(WebCache)
- NSData(ImageContentType)
- NSImage(WebCache)
- UIButton(WebCache)
- UIImage(ForceDecode)
- UIImage(GIF)
- UIImage(MultiFormat)
- UIImage(WebP)
- UIImageView(HighlightedWebCache)
- UIImageView(Webcache)
- UIView(WebCache)
- UIView(WebCacheOperation)
常量說明
- SDImageCacheType
- SDImageFormat
- SDWebImageDownloaderExecutionOrder
- SDWebImageDownloaderOptions
- SDWebImageOptions
// END 拉下閱讀量而已,沒有干貨。 接下去想學習下YY大神的代碼,希望能夠堅持看完吧。Come on!!!