[iOS學(xué)習(xí)筆記]·第三方網(wǎng)絡(luò)圖片處理框架:SDWebImage(官方文檔翻譯篇)

這篇文章翻譯自https://github.com/rs/SDWebImage 。目前,雖然AFNetworking也提供了圖片下載及緩存策略,但更專業(yè)的時(shí)候,圖片加載框架一般用SDWebImage,正如主流APP(如QQ和微信)會(huì)用到。當(dāng)然,只看官方文檔是不夠的,需要進(jìn)一步查閱源代碼方能理解SDWebImage的功能。

該庫(kù)提供了具有緩存支持的異步圖像下載器。為方便起見,我們?yōu)閁I元素例如UIImageView,UIButton,MKAnnotationView等類添加了categories。

1. 特征


  • 為UIImageView,UIButton,MKAnnotationView的Categories添加了有關(guān)網(wǎng)絡(luò)圖像和高速緩存管理的Categories
  • 異步圖像下載器
  • 異步內(nèi)存+磁盤圖像緩存,它具有自動(dòng)緩存到期處理
  • 后臺(tái)圖像解壓縮
  • 保證相同的URL不會(huì)被下載多次
  • 保證虛假URLs不會(huì)重復(fù)重試
  • 保證主線程永遠(yuǎn)不會(huì)被阻止
  • 好的性能!
  • 使用GCD和ARC

2. 支持的圖像格式


  • UIImage支持的圖像格式(JPEG,PNG,...)包括GIF
  • WebP格式,包括動(dòng)畫WebP(使用WebP subspec)

3. 系統(tǒng)要求


  • iOS 7.0或更高版本
  • tvOS 9.0或更高版本
  • watchOS 2.0或更高版本
  • OS X 10.8或更高版本
  • Xcode 7.3或更高版本
向后兼容性

4. 入門指南


5. 誰使用它


找出誰使用SDWebImage并將您的應(yīng)用程序添加到列表中。

6. 交流


  • 如果需要幫助,請(qǐng)使用stackoverflow。
    (Tag'sdwebimage')
  • 如果你想問一個(gè)一般的問題,請(qǐng)使用Stack Overflow。
  • 如果您發(fā)現(xiàn)錯(cuò)誤,請(qǐng)打開一個(gè)issue。
  • 如果您有功能請(qǐng)求,請(qǐng)打開一個(gè)issue。
  • 如果您想貢獻(xiàn),請(qǐng)?zhí)峤焕瓌?dòng)請(qǐng)求。

7. 如何使用


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"))

8. 動(dòng)畫圖像(GIF)支持


  • 從4.0版本開始,我們依靠FLAnimatedImage來處理我們的動(dòng)畫圖像。
  • 如果您使用cocoapods ,請(qǐng)?zhí)砑?code>pod 'SDWebImage/GIF' Cocapods到您的podfile。
  • 要使用它,只需確保使用FLAnimatedImageView而不是UIImageView。
  • 注意:仍然有一個(gè)向后兼容的功能,所以如果你仍然試圖用UIImageView加載一個(gè)GIF,它將只顯示第一幀作為靜態(tài)圖像。
  • 重要提示:FLAnimatedImage僅適用于iOS平臺(tái),因此對(duì)于所有其他平臺(tái)(OS X,tvOS,watchOS),我們將回退到上述的向后兼容性。

9. 常見問題


9.1 UITableViewCell與使用動(dòng)態(tài)圖像的大小尺寸

UITableView根據(jù)單元格的第一個(gè)圖像集,確定圖像的大小尺寸。如果遠(yuǎn)程圖像的尺寸與占位符圖像的大小不同,您可能會(huì)遇到奇怪的變形縮放問題。以下文章提供了解決此問題的方法:http://www.wrichards.com/blog/2011/11/sdwebimage-fixed-width-cell-images/

9.2 處理圖像刷新

默認(rèn)情況下,SDWebImage執(zhí)行非常積極的緩存。它完全無視HTTP服務(wù)器返回的各種緩存控制頭,并緩存返回的圖像且不受時(shí)間限制。這意味著您的圖像URL是指向永遠(yuǎn)不會(huì)改變的圖像的靜態(tài)網(wǎng)址。如果指向的圖像發(fā)生變化,則網(wǎng)址的某些部分應(yīng)當(dāng)相應(yīng)更改。

如果您無法控制您正在使用的圖像服務(wù)器,那么當(dāng)內(nèi)容更新時(shí),您可能無法更改該URL。例如,F(xiàn)acebook頭像URL就是這種情況。在這種情況下,您可以使用該SDWebImageRefreshCached標(biāo)志。這將稍微降低性能,但這會(huì)重視HTTP緩存控制頭:

[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
             placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
                      options:SDWebImageRefreshCached];

9.3 添加一個(gè)進(jìn)度指示器

在你調(diào)用sd_setImageWithURL之前,添加代碼如下:

[imageView sd_setShowActivityIndicatorView:YES];
[imageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
imageView.sd_setShowActivityIndicatorView(true)
imageView.sd_setIndicatorStyle(.Gray)

10. 安裝


在您的項(xiàng)目中使用SDWebImage有三種方法:

  • 使用CocoaPods
  • 使用Carthage
  • 通過將項(xiàng)目復(fù)制到您的存儲(chǔ)庫(kù)中

10.1 使用CocoaPods安裝

CocoaPods是Objective-C的依賴管理器,它可以自動(dòng)化并簡(jiǎn)化在項(xiàng)目中使用第三方庫(kù)的過程。有關(guān)詳細(xì)信息,請(qǐng)參閱“ 入門”
部分。

10.1.1 Podfile
platform :ios, '7.0'
pod 'SDWebImage', '~>3.8'

如果您使用Swift,請(qǐng)確保添加use_frameworks!并將目標(biāo)設(shè)置為iOS 8+:

platform :ios, '8.0'
use_frameworks!
10.1.2 子模塊(subspecs)

現(xiàn)在有4個(gè)可以的子模塊:CoreMapKit,GIFWebP(這意味著你只能安裝部分SDWebImage模塊。默認(rèn)情況下,你只會(huì)得到Core,所以如果你需要WebP,你需要指定它)。

Podfile示例:

pod 'SDWebImage/WebP'

10.2 使用Carthage安裝(iOS 8+)

Carthage是Swift和Objective-C的輕量級(jí)依賴管理員。它利用CocoaTouch模塊,并且比CocoaPods的侵入性更小。

要安裝Carthage,請(qǐng)遵循Carthage的說明

Cartfile

github "rs/SDWebImage"

10.3 通過克隆倉(cāng)庫(kù)安裝

請(qǐng)參閱手動(dòng)安裝

10.4 導(dǎo)入源文件中的headers

在需要使用庫(kù)的源文件中,導(dǎo)入頭文件:

#import <SDWebImage/UIImageView+WebCache.h>

10.5 構(gòu)建工程

到這里,您的workspace應(yīng)該能沒有錯(cuò)誤地被構(gòu)建。如果您遇到問題,請(qǐng)發(fā)郵件到社區(qū)可以幫助您解決問題。

11. 作者


12. 合作方


13. 許可證


所有源代碼均獲得MIT許可證許可。

14. 架構(gòu)圖


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,267評(píng)論 4 61
  • 嗯哼嗯哼蹦擦擦~~~ 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 ...
    philiha閱讀 5,258評(píng)論 0 6
  • 恩,因?yàn)橛械臅r(shí)候控制一長(zhǎng)串燈珠,但是如果寫代碼一個(gè)一個(gè)控制的話又太復(fù)雜了,所以我覺得應(yīng)該有現(xiàn)成的解決方案就是像fi...
    劍山閱讀 2,706評(píng)論 0 51
  • Vue做一個(gè)GitHub項(xiàng)目排行榜 GitHub不同語言熱門項(xiàng)目排行,Vue做頁面展示。 源代碼 源代碼地址:?? ...
    488a74c3bb61閱讀 2,102評(píng)論 0 6
  • 出發(fā)的這天風(fēng)和日麗,老爸步行送我們直到高速路口。 入住的酒店有升旗的時(shí)間表,距離天安門很近,方便第二天早起。 天氣...
    小鎮(zhèn)斜陽閱讀 224評(píng)論 0 0

友情鏈接更多精彩內(nèi)容