SDWebImage中文說明

_阿南_發表於2019-03-03

WebImage

前端時間想詳細的瞭解下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通過檢測第一張圖片的大小來設定一個單元格。如果你的遠端圖片與你的預設圖片大小不一致,有可能碰到奇怪的圖片變形問題。以下的文章提供了一個解決這個問題的思路:[www.wrichards.com/blog/2011/1…](www.wrichards.com/blog/2011/1…).

處理圖片重新整理

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許可中。

架構

類圖表

時序圖表

類說明

協議說明

分類說明

常量說明

// END 拉下閱讀量而已,沒有乾貨。 接下去想學習下YY大神的程式碼,希望能夠堅持看完吧。Come on!!!