RedPanda
Image loading and caching into tableViews and collectionViews library for iOS written in Swift
特性
- TableView/collectionView convenience loader
- 使用 url-indexPath-tag 进行请求哈希以加载 tableView 和 collectionView 中的图像
- 忽略正在处理或已处理且无效的重复调用
- 在网络错误或互联网连接错误导致连接恢复时重试失败的请求
- 对请求进行时间戳处理以应对刷新/更新集合,以及避免错误的回调执行
- 线程安全的内存和磁盘缓存
- 独立组件,可分别使用
- 磁盘缓存和内存缓存
- 可变内存缓存
- 具有访问磁盘缓存的图像加载器
- 可选删除所有磁盘缓存的图像或仅删除在特定日期之后访问的图像
依赖项
- ReachabilitySwift
- RealmSwift
要求
- iOs 12.0+
- Xcode 10.1+
- Swift 4.2+
安装
通过CocoaPods获取
pod 'RedPanda'
用法
import ImageCollectionLoader
- 将图像加载到tableViews或collectionViews
- 请求日期是此次调用的时间戳,调用者可以决定是否可以使用
结果图像(例如:刷新tableView或添加/删除行会更改indexpath以绘制图像) - 标签用于同一indexpath中有多个URL相同的图像时,以避免加载第二个图像(例如:可能是卡片和logo)
- 从cellForRow请求图像是安全的,因为重复的请求会被丢弃(请求通过URL、indexPath和标签进行哈希)
- 失败状态
- case currentlyLoading:已请求相同indexpath - 标签 - url的另一个请求,现在正在加载
- case invalid:请求的URL之前已被加载,但图像解析失败
- case processing:请求正在处理
- 请求日期是此次调用的时间戳,调用者可以决定是否可以使用
let imageCollectionLoader = ImageCollectionLoaderBuilder().defaultImp(ramMaxItemsCount: 60)
imageCollectionLoader.requestImage(requestDate: Date(), url: element, indexPath: indexPath, tag: "card", successHandler:
{
image , index , date in
guard let visibleCell = tableView.cellForRow(at: index) as? cell else {return}
visibleCell.iv.image = image
}, failedHandler: {
failedRequest,failedImage,requestState in
print(failedRequest)
print(failedImage)
print(requestState)
})
- 分别加载图像
let imageLoader = ImageLoaderBuilder().concrete(ramMaxItemsCount: 50).getImageFrom(urlString: "testUrl", completion: {
image in
}, fail: {
failMessage , error in
})
- 清除缓存
DiskCacheBuilder().concrete().deleteAll()
DiskCacheBuilder().concrete().deleteWith(minLastAccessDate: Date(), completion: {
success in
})
许可
MIT
待办事项
- 将网络和可达性监控器做成一个独立的组件,包括可注入的配置,其中包括
- 最大尝试次数
- 重试间隔
- 对URL的可注入预处理以使时间戳清除动态化
- 将可注入目录注入到DiskCache和DiskCacheFileSystem
- 为spawning localServer添加测试,并为同时运行多个ImageCollectionLoader实例添加测试
- 公开SyncedAccessHashableCollection并改进其api