测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年9月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Lee Zhe Yu 维护。
BmoImageLoader 是一个为 UIImageView 提供进度动画的组件
使用 AlamofireImage 实现将图片下载实现及缓存管理
iOS 8.0+ Xcode 8.0+ Swift 3.0+
Alamofire 4.0+ AlamofireImage 3.1
支持圆形,圆形,椭圆形,三角形,五边形,心形,星形等 7 种形状路径
BmoImageViewFactory.shape(UIImageView, shape: BmoImageViewShape)
工厂返回一个 BmoProgressAnimator 协议
let animator = BmoImageViewFactory
.progressAnimation(UIImageView, newImage: nil, style: BmoImageViewProgressStyle)
BmoProgressAnimator 默认进度 TotalUnitCount 为 100,如有需要可更改
animator.setTotalUnitCount(count: Int64)
进度向前推进时
animator.setCompletedUnitCount(count: Int64)
更多细节,您可以自定义动画样式
animator.setProgressColor(UIColor)
.setMarginPercent(percent: CGFloat)
.setAnimationDuration(duration: NSTimeInterval)
如果您想更灵活地使用,可以使用 AlamofireImage 的 ImageCache 和 ImageDownloader,自定义 ImageDownloader.ProgressHandler
,获取 totalBytesRead 和 totalExpectedBytesToRead 并使用 BmoImageViewFactory.progressAnimation
来显示进度动画
使用 URL 设置图片将异步下载图片并在请求完成后设置图片。
imageView.bmo_setImageWithURL(IMAGE_URL)
如果缓存图片,是否运行图片进度动画。默认值为 false
imageView.bmo_runAnimationIfCatched(true)
let placeholderImage = UIImage(named: "placeholder")
let animator = BmoImageViewFactory
.progressAnimation(UIImageView, newImage: placeholderImage, style: BmoImageViewProgressStyle.CirclePie(borderShape: true))
.setAnimationDuration(0.5)
.setCompletionBlock({ (result) in
if result.isSuccess {
//do something when succeed
}
if result.isFailure {
//do something when failed
}
})
if let newImage = UIImage(named: "newImage") {
animator.setNewImage(newImage)
.setCompletionState(BmoProgressCompletionState.Succeed)
}
使用 Alamofire Uploading 并带进度功能
Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL)
.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
print(totalBytesWritten)
// This closure is NOT called on the main queue for performance
// reasons. To update your ui, dispatch to the main queue.
dispatch_async(dispatch_get_main_queue()) {
print("Total bytes written on main queue: \(totalBytesWritten)")
}
}
.validate()
.responseJSON { response in
debugPrint(response)
}
然后将 totalBytesWritten
和 totalBytesExpectedToWrite
传递给 BmoProgressAnimator
let newImage = UIImage(named: "newImage")
let animator = BmoImageViewFactory
.progressAnimation(UIImageView, newImage: newImage, style: BmoImageViewProgressStyle.CircleBrush(borderShape: true))
.setTotalUnitCount(totalBytesExpectedToWrite)
.setCompletionBlock({ (result) in
if result.isSuccess {
//do something when succeed
}
if result.isFailure {
//do something when failed
}
})
上传时
animator.setCompletedUnitCount(totalBytesWritten)
上传完成,成功或失败
animator.setCompletionState(BmoProgressCompletionState.Succeed)
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。
BmoImageLoader 可以通过 CocoaPods 获得。要安装,只需将以下行添加到您的 Podfile 中
pod "BmoImageLoader"
BmoImageLoader 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。