iOS開發swift版異步加載網絡圖片(帶緩存和缺省圖片)
iOS開發之swift版異步加載網絡圖片
與SDWebImage異步加載網絡圖片的功能相似,只是代碼比較簡單,功能沒有SD的完善與強大,支持缺省添加圖片,支持本地緩存。
異步加載圖片的核心代碼如下:
func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){
var ZYHImage:UIImage?
if url == nil {
return
}
//設置默認圖片
if defaultImage != nil {
self.image=UIImage(named: defaultImage!)
}
//是否進行緩存處理
if isCache {
//緩存管理類
var data:NSData?=ZYHWebImageChcheCenter.readCacheFromUrl(url!)
if data != nil {
ZYHImage=UIImage(data: data!)
self.image=ZYHImage
}else{
//獲取異步線程
var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
dispatch_async(dispath, { () -> Void in
var URL:NSURL = NSURL(string: url!)!
var data:NSData?=NSData(contentsOfURL: URL)
if data != nil {
ZYHImage=UIImage(data: data!)
//寫緩存
ZYHWebImageChcheCenter.writeCacheToUrl(url!, data: data!)
//主線程中刷新UI
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//刷新主UI
self.image=ZYHImage
})
}
})
}
}else{
var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
dispatch_async(dispath, { () -> Void in
var URL:NSURL = NSURL(string: url!)!
var data:NSData?=NSData(contentsOfURL: URL)
if data != nil {
ZYHImage=UIImage(data: data!)
//寫緩存
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//刷新主UI
self.image=ZYHImage
})
}
})
}
}
} 緩存的處理這里采用的是寫文件的方式,通過文件名來對緩存進行管理,這個框架還不完善,后面會加入緩存清除等功能。緩存的核心代碼如下:
class func readCacheFromUrl(url:NSString)->NSData?{
var data:NSData?
var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)
if NSFileManager.defaultManager().fileExistsAtPath(path) {
data=NSData.dataWithContentsOfMappedFile(path) as? NSData
}
return data
}
class func writeCacheToUrl(url:NSString, data:NSData){
var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)
println(data.writeToFile(path, atomically: true))
}
//設置緩存路徑
class func getFullCachePathFromUrl(url:NSString)->NSString{
var chchePath=NSHomeDirectory().stringByAppendingString("/Library/Caches/MyCache")
var fileManager:NSFileManager=NSFileManager.defaultManager()
fileManager.fileExistsAtPath(chchePath)
if !(fileManager.fileExistsAtPath(chchePath)) {
fileManager.createDirectoryAtPath(chchePath, withIntermediateDirectories: true, attributes: nil, error: nil)
}
//進行字符串處理
var newURL:NSString
newURL=ZYHWebImageChcheCenter.stringToZYHString(url)
chchePath=chchePath.stringByAppendingFormat("/%@", newURL)
return chchePath
}
class func stringToZYHString(str:NSString)->NSString{
var newStr:NSMutableString=NSMutableString()
for var i:NSInteger=0; i < str.length; i++ {
var c:unichar=str.characterAtIndex(i)
if (c>=48&&c<=57)||(c>=65&&c<=90)||(c>=97&&c<=122){
newStr.appendFormat("%c", c)
}
}
return newStr.copy() as NSString
} 框架的github地址,歡迎指正與擴展:https://github.com/ZYHshao/swift-ZYHWebImage
因xcode的版本不同,swift語言語法隨環境時常會變化,此版本在6.1中可用,更高版本中需要修改少部分即可。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!