There are a few details that need to be paid attention to when loading images from URLs in your Swift code:
- loading and decoding the image on a background thread
- updating the UIImageView on the main thread
- not starting too many parallel downloads
- cancelling downloads when images are not needed anymore
SDWebImage
After adding the SDWebImage pod to the project:
pod 'SDWebImage'
Given an image view and a URL to load the image from, loading the image with an activity indicator is as simple as:
import UIKit
import SDWebImage
class ExampleViewController: UIViewController {
@IBOutlet weak var imageView : UIImageView!
// ...
func loadImage() {
let imageURL = URL(string: "https://upload.wikimedia.org/wikipedia/commons/1/15/Red_Apple.jpg")!
imageView.sd_setShowActivityIndicatorView(true)
imageView.sd_setIndicatorStyle(.gray)
imageView.sd_setImage(with: imageURL)
}
}
Kingfisher
Pretty much the same for Kingfisher:
pod 'Kingfisher'
Loading an image from an URL with activity indicator and displaying it in the image view:
import UIKit
import Kingfisher
class ExampleViewController: UIViewController {
@IBOutlet weak var imageView : UIImageView!
// ...
func loadImage() {
let imageURL = URL(string: "https://upload.wikimedia.org/wikipedia/commons/1/15/Red_Apple.jpg")!
imageView.kf.indicatorType = .activity
imageView.kf.setImage(with: imageURL)
}
}
Differences between the libraries: SDWebImage vs. Kingfisher
- SDWebImage supports progressive display of the image while loading is in progress via options: [.progressiveDownload] which is nice when loading larger images. This is not supported in Kingfisher as of now.
- SDWebImage has support for Webp images included as a subspec that works out of the box, while for Kingfisher it’s an external plugin KingfisherWebP that requires extra configuration - for applications that have a lot of resources, webp helps delivering higher quality with shorter download times.
- SDWebImage is implemented in Objective-C, Kingfisher in Swift 4.
Example project
Here is an example project that includes an example for both libraries which are included via CocoaPods:
Comments
Post a Comment