swift 异步加载图片(第三方框架ImageLoader)

时间:2023-03-08 16:49:16
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
// Override point for customization after application launch.
self.window!.backgroundColor = UIColor.whiteColor() self.window!.rootViewController = RootViewController(); self.window!.makeKeyAndVisible()
return true
}
}
import UIKit

class RootViewController: UIViewController {

    override func viewDidLoad() {
super.viewDidLoad() let imageView = UIImageView.init(frame: UIScreen.mainScreen().bounds);
imageView.backgroundColor = UIColor.greenColor()
self.view.addSubview(imageView) let path:String = "http://pic2.ooopic.com/11/86/60/84bOOOPIC13.jpg"
//异步加载图片(第三方框架)
ImageLoader.sharedLoader.imageForUrl(path) { (image, url) -> () in
imageView.image = image
}
}
}
import UIKit
import Foundation class ImageLoader { let cache = NSCache() class var sharedLoader : ImageLoader {
struct Static {
static let instance : ImageLoader = ImageLoader()
}
return Static.instance
} func imageForUrl(urlString: String, completionHandler:(image: UIImage?, url: String) -> ()) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {()in
let data: NSData? = self.cache.objectForKey(urlString) as? NSData if let goodData = data {
let image = UIImage(data: goodData)
dispatch_async(dispatch_get_main_queue(), {() in
completionHandler(image: image, url: urlString)
})
return
} let downloadTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: urlString)!, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if (error != nil) {
completionHandler(image: nil, url: urlString)
return
} if let data = data {
let image = UIImage(data: data)
self.cache.setObject(data, forKey: urlString)
dispatch_async(dispatch_get_main_queue(), {() in
completionHandler(image: image, url: urlString)
})
return
} })
downloadTask.resume()
}) }
}