KFSwiftImageLoader
KFSwiftImageLoader是一个高性能、轻量级、节能的纯Swift异步网页图片加载器,适用于iOS和 Watch,并具有内存和磁盘缓存。
这是世界上第一个针对 Watch优化的异步图片加载器,具有WKInterfaceImage扩展以及通过WKInterfaceDevice智能自动缓存处理的能力。
请还请查看KFWatchKitAnimations,它通过记录iOS模拟器中的动画来记录 Watch上精美的60 FPS动画的绝佳方法。
注:
特性:
- WKInterfaceImage、UIImageView、UIButton和MKAnnotationView的异步网页图片加载扩展。
- 内存和磁盘缓存,防止每次请求或应用重启时重复下载图片,具有自动缓存管理以优化资源使用。
- 通过只对引用相同URL字符串的多个来源发送单个HTTP/HTTPS请求下载图片,注册它们作为请求的观察者以提高能源效率。
- 通过利用最新的现代技术,如Swift 5.1、URLSession和GCD,实现最大性能。
KFSwiftImageLoader需求
- Xcode 11.0+
- iOS 12.0+
- watchOS 6.0+
CocoaPods
为了确保您能及时获取KFSwiftImageLoader的最新版本,建议您使用CocoaPods。
为优化CocoaPods 1.8.4+,需要先运行以下命令
sudo gem install cocoapods
将以下内容添加到您的Podfile中
platform :ios, '12.0'
pod 'KFSwiftImageLoader', '~> 4.0'
在需要使用KFSwiftImageLoader的任何地方都需要导入它
import KFSwiftImageLoader
示例用法
UIImageView
imageView.loadImage(urlString: urlString)
是的,真的很简单。只需一键即可完成。在上面的示例中,"占位符"和"完成"输入被忽略,因此它们默认为nil。我们可以按以下方式包含它们
imageView.loadImage(urlString: urlString, placeholder: UIImage(named: "KiavashFaisali")) {
(success, error) in
// 'success' is a 'Bool' indicating success or failure.
// 'error' is an 'Error?' containing the error (if any) when 'success' is 'false'.
}
为了提高灵活性,有几种不同的方法可以加载图片。以下是所有这些方法的签名
func loadImage(_ urlString: String,
placeholder: UIImage? = nil,
completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil)
func loadImage(_ url: URL,
placeholder: UIImage? = nil,
completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil)
func loadImage(_ request: URLRequest,
placeholder: UIImage? = nil,
completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil)
WKInterfaceImage
func loadImage(_ urlString: urlString,
placeholderName: String? = nil,
completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil)
与UIImageView扩展相比,主要区别在于参数"placeholderName",它需要将占位符图像捆绑到r园区Watch应用中,出于性能原因。
UIButton
button.loadImage(urlString)
同样,KFSwiftImageLoader 使加载图像变得非常简单。在这种情况下,按钮主要使用了与UIImageView相同的函数签名,但是还包含两个可选参数:“isBackground”和“controlState”。
func loadImage(_ urlString: String,
placeholder: UIImage? = nil,
controlState: UIControlState = .normal,
isBackground: Bool = false,
completion: ((_ success: Bool, _ error: Error?) -> Void)? = nil)
"controlState" 接收一个所需的UIControlState值,当设置按钮的图像时。 "isBackground" 只简单地表示按钮是否应该使用 "setBackgroundImage:for:" 或 "setImage:for:" 进行图像加载。
MKAnnotationView
annotationView.loadImage(urlString)
MKAnnotationView扩展中的方法与UIImageView扩展中的方法完全相同。
KFImageCacheManager
// Disable the fade animation.
// The default value is 0.1.
KFImageCacheManager.shared.fadeAnimationDuration = 0.0
// Set a custom timeout interval for the image requests.
// The default value is 60.0.
KFImageCacheManager.shared.timeoutIntervalForRequest = 15.0
// Set a custom request cache policy for the image requests as well as the session's configuration.
// The default value is .returnCacheDataElseLoad.
KFImageCacheManager.shared.requestCachePolicy = .useProtocolCachePolicy
// Disable file system caching by adjusting the max age of the disk cache and the request cache policy.
// The default value is 60 * 60 * 24 * 7 = 604800 seconds (1 week).
KFImageCacheManager.shared.diskCacheMaxAge = 0
KFImageCacheManager.shared.requestCachePolicy = .reloadIgnoringLocalCacheData
示例应用
请查看示例中的示例应用,该应用位于“示例”文件夹中,以了解如何使用KFSwiftImageLoader在iOS和 Watch中加载图像。
联系方式
Kiavash Faisali
许可
KFSwiftImageLoader可在MIT许可下使用。
版权(c)2019 Kiavash Faisali
特此免费授权,任何获得本软件及其相关文档副本(以下简称“软件”)的个人可以不受限制地使用该软件,包括但不限于使用权、复制权、修改权、合并权、发布权、分发权、转授权权和/或销售软件副本的权利,并允许向软件提供者的任何人员这样做,但需遵守以下条件:
上述版权声明和本许可声明应包含在软件的全部副本或实质部分中。
本软件按“现状”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他原因而引起的,这些责任源自、产生于或与此软件或其使用有关。