1. 程式人生 > >swift之網路下載圖片sdwebImage、Kingfisher

swift之網路下載圖片sdwebImage、Kingfisher

參考:https://www.jianshu.com/p/55bbfbdf78de

=============方法一:使用sdwebImage

下載地址:https://github.com/rs/SDWebImage

在橋接檔案中匯入

#import <SDWebImage/UIImageView+WebCache.h>

使用:

  let imagev:UIImageView=UIImageView.init(frame:CGRect(x:0,y:0,width:100,height:100))

        view .addSubview(imagev)

     imagev.sd_setImage

(with: NSURL.init(string: "http://test.ahwofu.com/public/upload/ad/2018/01-13/abc1cc5d2e661e4a")! as URL, placeholderImage: UIImage.init(named: "bannerhomeOne"), options: [], progress: nil, completed:nil)

==============方法二:Kingfisher

下載地址:https://github.com/onevcat/Kingfisher

  • 圖片快取ImageCache 使用
       ImageChache 給你提供了多級快取,可以使用記憶體、磁碟儲存,還提供了儲存、檢索、清除圖片、移除等操作,如果你需要監聽到磁碟的變化可以通過KingfisherDidCleanDiskCacheNotification
    新增通知。

// ImageCache,預設是

let cache = ImageCache.default

// 設定記憶體快取的大小,預設是0 pixel表示no limit ,注意它是畫素為單位,與我們平時的bytes不同

cache.maxMemoryCost =10 * 1024 * 1024

// 磁碟快取大小,預設0 bytes表示no limit (50 * 1024)

cache.maxDiskCacheSize =50 * 1024 * 1024

// 設定快取週期 (預設1 week)

cache.maxCachePeriodInSecond =60 * 60 * 24 *7

// 儲存一張圖片, Key 可用於後期檢索資源、刪除以及在刪除時的一個通知引數

cache.store(UIImage(named:"test")!, forKey: "test")

// 刪除

cache.removeImage(forKey:"test")

// 檢索圖片

let imgDisk = cache.retrieveImageInDiskCache(forKey:"test")

let imgMemo = cache.retrieveImageInMemoryCache(forKey:"test")

// 非同步檢索

cache.retrieveImage(forKey:"test", options: nil) { (_,_) in

}

// 清除

cache.clearDiskCache()

cache.clearMemoryCache()

cache.clearDiskCache {

}

// 清除過期快取

cache.cleanExpiredDiskCache()

cache.cleanExpiredDiskCache {

}

cache.backgroundCleanExpiredDiskCache()// 後臺清理,但不需要回調

// 判定圖片是否存在

let cached = cache.isImageCached(forKey:"test")

// 監聽資料移除

NotificationCenter.default.addObserver(self, selector:#selector(cleanDiskCache), name: NSNotification.Name.init("KingfisherDidCleanDiskCacheNotification"), object:nil)

==========下載圖片帶進度

下載圖片:

片載入ImageDownloader使用

  名字就可以很清楚的知道,這個類就是用來下載圖片的,它為我們提供了一些頭的設定(比如說你有些圖片是需要認證使用者才能下載的);安全設定:我們在下載圖片時哪些Host是可信任的;下載超時設定;下載回撥等

let downloader = ImageDownloader.default

// 設定可信任的Host

let hosts: Set<String> = ["http://xxxxx.com","http://#####.com"]

downloader.trustedHosts =hosts

// 設定sessionConfiguration

downloader.sessionConfiguration =URLSessionConfiguration.default

// 設定代理,詳情參考 ImageDownloaderDelegate

downloader.delegate =self

// 下載超時設定

downloader.downloadTimeout =20

// 下載圖片

let retriveTask = downloader.downloadImage(with: URL(string: "http://xxx.com")!, retrieveImageTask:nil, options: nil, progressBlock:nil, completionHandler: {

    (image, error, imageURL, originalData) in

})

// 取消下載

retriveTask?.cancel()


=====================直接下載設定圖片

使用:

引入import Kingfisher

  • let imagev:UIImageView=UIImageView.init(frame:CGRect(x:0,y:50,width:100,height:100))

        view.addSubview(imagev)

        imagev.kf.setImage(with:ImageResource(downloadURL:URL.init(string:"http://www.ahwofu.com/upload/201710/1508813630.jpg")!))

============主控制器KingfisherManager使用

   KingfisherManager是連線ImageDownloader與ImageCache的,所以你可以通過manager得到 downloader與cache,並且還能改設定載入選項,當然你也可以設定其他的ImageDownloader與ImageCache到你的Manager。

let kfManager = KingfisherManager.shared

// 通過manager 獲取cache

cache = kfManager.cache

// 通過manager 獲取downloader

downloader = kfManager.downloader

// 設定options, 你可以設定你的newCache/newDownloader以及其他配置

kfManager.defaultOptions = [.targetCache(newCache), .downloader(newDownloader), .forceRefresh, .backgroundDecode, .onlyFromCache, .downloadPriority(1.0)]

// 檢索

let resource = ImageResource(downloadURL:URL(string: "http://xxxx.com")!, cacheKey:"text")

let retriveImageTask = kfManager.retrieveImage(with: resource, options: nil, progressBlock: nil, completionHandler: {

    (image, error, cacheType, imageURL) in

    if error == nil {

        print("檢索圖片成功")

    } else {

        print("檢索圖片失敗")

    }

})

retriveImageTask.cancel()


================

Kingfisher 提供了UIButton與UIImageView的擴充套件,使你可以通過直接設定圖片URL來顯示,兩者用法差不多,以UIImageView為例:

// 設定網路圖片

imageView.kf.setImage(with: ImageResource(downloadURL: imageURL!))

imageView.kf.setImage(with: ImageResource(downloadURL: imageURL!), placeholder:UIImage(named: "test"), options:nil, progressBlock: nil, completionHandler: nil)

// UIImageView 也可以設定取消載入 (兩種方式)

imageView.kf.cancelDownloadTask()

let retriveImaeTask = imageView.kf.setImage(with:ImageResource(downloadURL: imageURL!))

retriveImaeTask.cancel()



相關推薦

swift網路下載圖片sdwebImageKingfisher

參考:https://www.jianshu.com/p/55bbfbdf78de =============方法一:使用sdwebImage 下載地址:https://github.com/rs/SDWebImage 在橋接檔案中匯入 #import <S

iOS 網路下載圖片

////網路下載圖片方法一://處理圖片url---下載圖片---儲存圖片到相簿//-(void)dealDownloadImageStr{//    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QU

iOS開發實踐cell下載圖片(SDWebImage)

    前兩篇是自己寫的下載圖片方法,現在用第三方框架只要幾行程式碼就可以實現圖片的下載。SDWebImage底層實現的思路也是和前面說的一樣。 SDWebImage是網路圖片處理框架,封裝很很多方法,例如:圖片下載、圖片快取、下載進度監聽、gif處理等等。大大提高了網路圖

網路載入圖片,FrescoImageLoaderPicasso的使用

1.Fresco 的使用 加入依賴 //fresco 圖片依賴 記得配置App初始化 implementation 'com.facebook.fresco:fresco:1.11.0' //fresco GIF依賴 記得配置App初始化 impl

Swift網路程式設計-請求快取

在網路程式設計的過程中,快取操作的應用十分廣泛 在使用快取技術過程中,需要的注意點: 1、經常更新的資料,不能使用快取技術 2、不經常更新的資料,果斷使用快取技術 3、如果存在大量請求,並且使用快取技

Swift自動閉包(@autoclosure@noescape@escape??)

@autoclosure(自動閉包) 1:自動閉包,顧名思義是一種自動建立的閉包,用於包裝函式引數的表示式,可以說是一種簡便語法. 2:自動閉包不接受任何引數,被呼叫時會返回被包裝在其中的表示式的值。 

swift非同步載入圖片的tableview

tableview中使用非同步執行緒載入圖片,並且實現下拉重新整理和上拉翻頁功能。 效果如下: 首先,建立工程: stroyboard中增加tableview 如下: 增加RootTableViewController 程式碼如下: // // RootTab

Android顯示從網路下載圖片偏小的問題

在從網路上下載圖片時發現圖片偏小,原來以為是BitmapFactory.decodeStream時BitmapFactory.Options的選擇問題,但是試過了很多方法,達不到理想效果,後來發現是BitmapDrawable的使用問題,使用了BitmapDra

Volley網路框架快取載入圖片Post與get的資料請求

         前言:Volley作為主流網路框架之一,必然有它的優點。Volley可是說是把AsyncHttpClient和Universal-Image-Loader的優點集於了一身, 它的常用在資料量不大,但網路通訊頻繁,而且有圖片快取

[Xcode10 實際操作]八網路與多執行緒-(15)使用網址會話物件URLSession下載圖片並存儲在沙箱目錄中

本文將演示如何通過網址會話物件URLSession下載圖片並存儲在沙箱目錄中。 網址會話物件URLSession具有在後臺上傳和下載、暫停和恢復網路操作、豐富的代理模式等優點。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit

[Xcode10 實際操作]八網路與多執行緒-(22)使用GCD多執行緒技術非同步下載圖片

本文將演示如何使用使用GCD多執行緒技術非同步下載圖片。 Grand Central Dispatch(GCD) 是 Apple 開發的一個多核程式設計的較新的解決方法。 它主要用於優化應用程式以支援多核處理器以及其他對稱多處理系統。 它是一個線上程池模式的基礎上執行的併發任務。 在 Mac OS X

Python3網路爬蟲:Scrapy入門使用ImagesPipline下載圖片

Python版本: python3.+ 執行環境: Mac OS IDE: pycharm 一前言 二初識ImagesPipline ImagesPipline的特性 ImagesPipline的工

IOS網路多執行緒shareSDK-使用EDG多執行緒技術下載圖片

使用EDG中央排程多執行緒技術實現圖片的非同步下載 // //  ViewController.swift //  Dome2test // //  Created by 郭文亮 on 2018/11

iOS 下載快取網路圖片 SDWebImage

SDWebImage 是一個開源的第三方庫,它提供了 UIImageView 的一個分類,以支援從遠端伺服器下載並快取圖片的功能。 在 UITableView 中使用 sd_setImageWithURL:placeholderImage: 方法,示例程

iOS開發網路檔案下載大檔案下載斷點下載

這裡寫圖片描述 iOS開發中經常會用到檔案的下載與上傳功能,今天咱們來分享一下檔案下載的思路。檔案上傳下篇再說。 檔案下載分為小檔案下載與大檔案下載 小檔案下載 小檔案可以是一張圖片,或者一個檔案,這裡指在現行的網路狀況下基本上不需要等待很久就能下載好的檔案。這裡以p

iOS開發網路程式設計--4NSURLSessionDataTask實現檔案下載(離線斷點續傳下載)

前言:根據前篇《iOS開發之網路程式設計--2、NSURLSessionDownloadTask檔案下載》或者《iOS開發之網路程式設計--3、NSURLSessionDataTask實現檔案下載(離線斷點續傳下載)》,都遺留了一個細節未處理的問題,那就是在離線斷點下載的過程中,當應用程式重新啟動之後,進度

swift asas!as?

ani pre 向下轉型 run 值類型 模式匹配 性問題 不同 派生類 1,as使用場合(1)從派生類轉換為基類,向上轉型(upcasts) 1 class Animal {} 2 class Cat: Animal {} 3 let cat = Cat() 4 le

python3爬蟲下載圖片常見問題

users code mod 成功 col typeerror 報錯 In python2 剛開始學python3,百度了下python的用法,看到爬蟲下載圖片很好玩,於是百度各種資料學習了下,結果總是運行不成功,最後終於改好了,記錄下。 from urllib im

利用python3爬蟲下載圖片pdf文件

環境 語言環境:python3.6 作業系統:Win10 第三方庫 requests 網際網路上的資源大都是以二進位制形式儲存和運輸的,如圖片、pdf、音訊、視訊等,像.dat、.ts等這些不常用的檔案也都是二進位制。我們知道python3爬蟲是利用爬蟲模擬瀏覽器向服務端傳送請求

網路程式設計-顯示資訊下載檔案

隨著雲端計算時代的到來,任何一種開發和程式設計都會與因特網有關係。網路辦公、手機遊戲、線上電影、電子商務、電子政務、電子郵件、遠端控制,以及其他各種大資料應用,都是網路程式設計的實際應用。 .NetFramework的System.Net名稱空間為各種網路協議提供了簡單的程式設計介面,封裝了