Swift版本的圖片載入類
之前使用OC版本的,都是基於AFN而自行封裝的類庫,
現在寫了一個swift版本的,很方便使用,在些開源出來。
首先是圖片下載類:
// // HYBImageLoader.swift // OSChinaClient // // Created by 黃儀標 on 15/3/5. // Copyright (c) 2015年 huangyibiao free edu. All rights reserved. // import Foundation import UIKit /// /// 圖片下載類,使用NSCache作為快取處理 /// /// 作者:黃儀標 /// /// Email: [email protected] /// /// github:https://github.com/632840804 /// /// CSDN Blog: http://blog.csdn.net/woaifen3344/ /// /// Note:有任何可以,可以通過Email反饋,會在空閒時間處理,謝謝! /// class HYBImageLoader { /// 快取處理物件 var cache = NSCache() /// /// 宣告為單例 /// class var sharedInstance : HYBImageLoader { struct Loader { static let instance = HYBImageLoader() } return Loader.instance } /// /// 載入圖片 /// /// url 圖片請求地址 /// /// completion 載入完成時的回撥,不論是載入成功還是載入失敗,都會回撥 /// image 可空型別,為nil表示載入失敗,不為nil,表示載入成功 /// isFromCache Bool型別,表示是否是從快取中提取出來的圖片 func loadImage(url: String, completionHandler:(image: UIImage?, isFromCache: Bool) -> ()) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {()in var data: NSData? = self.cache.objectForKey(url.md5ForLoader) as? NSData if let goodData = data { let image = UIImage(data: goodData) dispatch_async(dispatch_get_main_queue(), {() in completionHandler(image: image, isFromCache: true) }) return } var downloadTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!, completionHandler: {(data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in if (error != nil) { completionHandler(image: nil, isFromCache: false); return } if data != nil { let image = UIImage(data: data) self.cache.setObject(data, forKey: url.md5ForLoader) dispatch_async(dispatch_get_main_queue(), {() in completionHandler(image: image, isFromCache: false) }) return } }); downloadTask.resume() }) } } /// /// String結構通用功能擴充套件 /// extension String { /// /// 獲取自身md5加密後的字串 /// var md5ForLoader : String { let str = self.cStringUsingEncoding(NSUTF8StringEncoding) let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) let digestLen = Int(CC_MD5_DIGEST_LENGTH) let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen); CC_MD5(str!, strLen, result); var hash = NSMutableString(); for i in 0 ..< digestLen { hash.appendFormat("%02x", result[i]); } result.destroy(); return String(format: hash) } }
接下來就是圖片載入控制元件類:
// // HYBLoadingImageView.swift // OSChinaClient // // Created by 黃儀標 on 15/3/5. // Copyright (c) 2015年 huangyibiao free edu. All rights reserved. // import Foundation import UIKit typealias HYBImageLoadingCompletion = (image: UIImage?) -> (); typealias HYBImageCompletion = (image: UIImage?, isFromCache: Bool) -> (); /// /// 圖片載入控制元件,所有需要到網路載入的圖片,都需要使用此控制元件操作 /// /// 作者:黃儀標 /// /// Email:
[email protected] /// /// github:https://github.com/632840804 /// /// CSDN Blog: http://blog.csdn.net/woaifen3344/ /// /// Note:有任何可以,可以通過Email反饋,會在空閒時間處理,謝謝! /// class HYBLoadingImageView: UIImageView { override convenience init() { self.init(frame: CGRectZero); } override init(frame: CGRect) { super.init(frame: frame); self.clipsToBounds = true; self.layer.masksToBounds = true; } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder); self.clipsToBounds = true; self.layer.masksToBounds = true; } /// /// 是否將圖片控制元件顯示為圓形 /// /// isCircle true表示顯示為圓 /// func isCircle(isCircle: Bool = false) { if isCircle == true { var width = min(self.frame.size.width, self.frame.size.height); self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, width); self.layer.cornerRadius = width / 2; } } /// /// 載入圖片 /// /// url 圖片請求地址 /// func loadImage(url: String) { self.loadImage(url, holder: ""); } /// /// 載入圖片 /// /// url 圖片請求地址 /// /// holder 佔位圖片名稱 /// func loadImage(url: String, holder: String) { self.loadImage(url, holder: holder, completion: nil); } /// /// 載入圖片 /// /// url 圖片請求地址 /// /// completion 圖片載入完成時的回撥閉包 /// func loadImage(url: String, completion: HYBImageLoadingCompletion?) { self.loadImage(url, holder: "", completion: completion); } /// /// 載入圖片 /// /// url 圖片請求地址 /// /// holder 佔位圖片名稱 /// /// completion 圖片載入完成時的回撥閉包 /// func loadImage(url: String, holder: String, completion: HYBImageLoadingCompletion?) { if !holder.isEmpty { self.image = UIImage(named: holder); } if url.isEmpty { completion?(image: nil); return; } HYBImageLoader.sharedInstance.loadImage(url, completionHandler: { (image, isFromCache) -> () in if image == nil { // 圖片載入失敗 completion?(image: nil); } else { println(url); // 在圖片載入成功後,如果處理新增圖片顯示的動畫處理,如果在此處新增 if !isFromCache { // 新增淡入淡出的動畫效果 let animation = CATransition(); animation.duration = 0.65; animation.type = kCATransitionFade; animation.removedOnCompletion = true; self.layer.addAnimation(animation, forKey: "transition"); } self.image = image; completion?(image: image); } }); } }
github下載地址:https://github.com/632840804/SwiftImageView/tree/master
相關推薦
Swift版本的圖片載入類
之前使用OC版本的,都是基於AFN而自行封裝的類庫, 現在寫了一個swift版本的,很方便使用,在些開源出來。 首先是圖片下載類: // // HYBImageLoader.swift // OSChinaClient // // Created by 黃儀標 on
JVM(Java SE 11版本)載入類和介面
本文介紹了Java虛擬機器(Java SE 11版本)載入類和介面。 載入類和介面 載入是指查詢具有特定名稱的類或介面型別的二進位制形式的過程。典型的做法是,查詢事先由Java編譯器從原始碼計算而來二進位制表示,但也可能是通過動態計算。 二進位制形式最終會構造成一個Class物件
Android Handler 非同步訊息處理機制的妙用 建立強大的圖片載入類
最近建立了一個群,方便大家交流,群號:55032675上一篇部落格介紹了Android非同步訊息處理機制,如果你還不瞭解,可以看:Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係 。那篇部落格的最後,提出可以把非同步訊息處理
Android Handler 非同步訊息處理機制三:妙用手法 建立強大的圖片載入類
上一篇部落格介紹了Android非同步訊息處理機制,如果你還不瞭解,可以看:Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係 。那篇部落格的最後,提出可以把非同步訊息處理機制不僅僅是在MainActivit
LIFO和FIFO——Handler 非同步訊息處理機制的妙用 建立強大的圖片載入類
最近建立了一個群,方便大家交流,群號:55032675 上一篇部落格介紹了Android非同步訊息處理機制,如果你還不瞭解,可以看:Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係 。那篇部落格的最後,提出可以把非同步訊息處理機制不僅
Android Handler(子執行緒Handler)非同步訊息處理機制的妙用(活用訊號量) 建立強大的圖片載入類
最近建立了一個群,方便大家交流,群號:55032675 上一篇部落格介紹了Android非同步訊息處理機制,如果你還不瞭解,可以看:Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係 。那篇部落格的最後
Android Handler 非同步訊息處理機制的妙用 建立強大的圖片載入類【轉】
上一篇部落格介紹了Android非同步訊息處理機制,如果你還不瞭解,可以看:Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係 。那篇部落格的最後,提出可以把非同步訊息處理機制不僅僅是在MainActiv
HttpUrlConnection+圖片載入+工具類+介面回撥+單例+AsyncTask封裝工具類
1.MainActivity頁面 package com.example.httpurlconnection; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import andro
HttpClient+圖片載入+工具類+介面回撥+AsyncTask封裝到工具類
1.MainActivity頁面 package com.example.httpclient; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widg
HttpClient+圖片載入+工具類+介面回撥
1.MainActivity頁面 package com.example.httpclient; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import
iOS基礎網路教程-Swift版本: 3.使用UIWebView載入本地的資料
在前面, 我們使用了 UIWebView 載入了網路的資料, 其實 UIWebView不只是可以載入普通的網頁, 還可以載入其他不同的檔案, 比如視訊, 音樂, PDF, Word等等檔案都是可以的, 下面讓我們來看看~~ PS: 例子裡的 PDF, Txt, doc 檔案請自行準備, 裡面的內容隨便, 只
SDWebImage使用——一個可管理遠端圖片載入的類庫
SDWebImage使用——一個可管理遠端圖片載入的類庫 SDWebImage託管在github上。https://github.com/rs/SDWebImage 這個類庫提供一個UIImageView類別以支援載入來自網路的遠端圖片。具有快取管理、非同步下載、同一個UR
Universal-Image-Loader圖片非同步載入類庫
這是 一個開源的Android關於下載顯示圖片的工具類,在這個下載包裡面jar檔案,用於我們匯入專案使用,具體使用方法在包裡面也含有。下面是一個例子: 雙擊程式碼複製 1 2 <uses-permissionandroid:name="android.pe
[Swift通天遁地]五、高階擴充套件-(13)圖片資源本地化設定:根據不同的語言環境顯示不同語言版本圖片
本文將演示如何給應用程式中的圖片資源,進行本地化設定。 在專案資料夾【DemoApp】上點選滑鼠右鍵,彈出右鍵選單。 【Add Files to "DemoApp"】-> 匯入圖片檔案 -> 【Add】 當前的圖片為中文,為該圖片新增本地化設定, 點選顯示或隱藏工具面板圖示,顯示右側的面板
swift 不能載入網路圖片
“App TransportSecurity has blocked a cleartext HTTP (http://) resource load since it isinsecure. Temporary exceptions can be configured v
Android-Image-Loader 圖片非同步載入類庫的使用超(詳細配置)
這個圖片非同步載入並快取的類已經被很多開發者所使用,是最常用的幾個開源庫之一,主流的應用,隨便反編譯幾個火的專案,都可以見到它的身影。 可是有的人並不知道如何去使用這庫如何進行配置,網上查到的資訊對於剛接觸的人來說可能太少了,下面我就把我使用
關於android 4.4以上版本從相簿選取圖片載入不了圖片的問題
1.Android4.4以上版本的呼叫程式碼: public static String getPath(final Context context, final Uri uri) { final boolean isKitKat
圖片載入工具類
public class BitmapUtil { private static final String TAG = "BtimapUtil"; /** * 根據網址獲得圖片,優先從本地獲取,本地沒有則從網路下載 * @p
swift之非同步載入圖片的tableview
tableview中使用非同步執行緒載入圖片,並且實現下拉重新整理和上拉翻頁功能。 效果如下: 首先,建立工程: stroyboard中增加tableview 如下: 增加RootTableViewController 程式碼如下: // // RootTab
解決Glide在5.0版本能加載出圖片,在6.0版本上載入不出圖片問題
解決辦法: //圓形 public static void load(Context context, String url, ImageView iv){ RequestManager