一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶(hù)?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

iOS中SDWebImage怎么用?

大?。?/span>0.3 MB 人氣: 2017-09-26 需要積分:1

  由于要監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài),在這里筆者推薦使用AFNetWorking。

  1)在GitHub或者利用cocoaPod給項(xiàng)目導(dǎo)入第三方框架AFNetWorking。

  2)在AppDelegate.m文件中的application:didFinishLaunchingWithOptions:方法中監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)。

  // AppDelegate.m 文件中

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  {

  // 監(jiān)控網(wǎng)絡(luò)狀態(tài)

  [[AFNetworkReachabilityManager sharedManager] startMonitoring];

  }

  // 以下代碼在需要監(jiān)聽(tīng)網(wǎng)絡(luò)狀態(tài)的方法中使用

  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

  if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖

  } else { // 其他,下載小圖

  }

  }

  這時(shí)就會(huì)有iOS學(xué)習(xí)者開(kāi)始抱怨:這不是很簡(jiǎn)單嗎?于是三下五除二寫(xiě)完了以下代碼。

  // 利用MVC,在設(shè)置cell的模型屬性時(shí)候,下載圖片

  - setItem:(CustomItem *)item

  {

  _item = item;

  UIImage *placeholder = [UIImage imageNamed:@“placeholderImage”];

  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

  if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖

  [self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];

  } else { // 其他,下載小圖

 ?。踫elf.imageView sd_setImageWithURL:[NSURL URLWithString:item.thumbnailImage] placeholderImage:placeholder];

  }

  }

  此時(shí),確實(shí)能完成基本的按照當(dāng)前網(wǎng)絡(luò)狀態(tài)下載對(duì)應(yīng)的圖片,但是真實(shí)開(kāi)發(fā)中,這樣其實(shí)是不合理的。以下是需要注意的細(xì)節(jié):

  1)SDWebImage會(huì)自動(dòng)幫助開(kāi)發(fā)者緩存圖片(包括內(nèi)存緩存,沙盒緩存),所以我們需要設(shè)置用戶(hù)在WiFi環(huán)境下下載的高清圖,下次在蜂窩網(wǎng)絡(luò)狀態(tài)下打開(kāi)應(yīng)用也應(yīng)顯示高清圖,而不是去下載縮略圖。

  2)許多應(yīng)用設(shè)置模塊帶有一個(gè)功能:移動(dòng)網(wǎng)絡(luò)環(huán)境下仍然顯示高清圖。這個(gè)功能其實(shí)是將設(shè)置記錄在沙盒中,關(guān)于數(shù)據(jù)保存到本地,可以查看本人另一篇簡(jiǎn)書(shū)首頁(yè)文章:iOS本地?cái)?shù)據(jù)存取,看這里就夠了。

  3)當(dāng)用戶(hù)處于離線狀態(tài)時(shí)候,無(wú)法合理處理業(yè)務(wù)。

  于是,開(kāi)始加以改進(jìn)。為了讓讀者你更容易理解,我先貼出偽代碼:

  - setItem:(CustomItem *)item

  {

  _item = item;

  if (緩存中有原圖)

  {

  self.imageView.image = 原圖;

  } else

  {

  if (Wifi環(huán)境)

  {

  下載顯示原圖

  } else if (手機(jī)自帶網(wǎng)絡(luò))

  {

  if (3G\4G環(huán)境下仍然下載原圖)

  {

  下載顯示原圖

  } else

  {

  下載顯示小圖

  }

  } else

  {

  if (緩存中有小圖)

  {

  self.imageView.image = 小圖;

  } else // 處理離線狀態(tài)

  {

  self.imageView.image = 占位圖片;

  }

  }

  }

  }

  實(shí)現(xiàn)上面的偽代碼:讀者可以一一對(duì)應(yīng)上面的偽代碼。練習(xí)的時(shí)候推薦先寫(xiě)偽代碼,再寫(xiě)真實(shí)代碼

  多多注意“注釋”解釋。

  - setItem:(CustomItem *)item

  {

  _item = item;

  // 占位圖片

  UIImage *placeholder = [UIImage imageNamed:@“placeholderImage”];

  // 從內(nèi)存\沙盒緩存中獲得原圖,

  UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.originalImage];

  if (originalImage) { // 如果內(nèi)存\沙盒緩存有原圖,那么就直接顯示原圖(不管現(xiàn)在是什么網(wǎng)絡(luò)狀態(tài))

  self.imageView.image = originalImage;

  } else { // 內(nèi)存\沙盒緩存沒(méi)有原圖

  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];

  if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下載原圖

 ?。踫elf.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];

  } else if (mgr.isReachableViaWWAN) { // 在使用手機(jī)自帶網(wǎng)絡(luò)

  // 用戶(hù)的配置項(xiàng)假設(shè)利用NSUserDefaults存儲(chǔ)到了沙盒中

  // [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@“alwaysDownloadOriginalImage”];

  // [[NSUserDefaults standardUserDefaults] synchronize];

  #warning 從沙盒中讀取用戶(hù)的配置項(xiàng):在3G\4G環(huán)境是否仍然下載原圖

  BOOL alwaysDownloadOriginalImage = [[NSUserDefaults standardUserDefaults] boolForKey:@“alwaysDownloadOriginalImage”];

  if (alwaysDownloadOriginalImage) { // 下載原圖

  [self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder];

  } else { // 下載小圖

 ?。踫elf.imageView sd_setImageWithURL:[NSURL URLWithString:item.thumbnailImage] placeholderImage:placeholder];

  }

  } else { // 沒(méi)有網(wǎng)絡(luò)

  UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.thumbnailImage];

  if (thumbnailImage) { // 內(nèi)存\沙盒緩存中有小圖

  self.imageView.image = thumbnailImage;

  } else { // 處理離線狀態(tài),而且有沒(méi)有緩存時(shí)的情況

  self.imageView.image = placeholder;

  }

  }

  }

  }

  解決了嗎?真正的坑才剛剛開(kāi)始。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶(hù)評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?