BmoImageLoader 1.0.2

BmoImageLoader 1.0.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2017年9月
SwiftSwift 版本3.0
SPM支持 SPM

Lee Zhe Yu 维护。




  • 作者:
  • LEE ZHE YU

BmoImageLoader

BmoImageLoader 是一个为 UIImageView 提供进度动画的组件

使用 AlamofireImage 实现将图片下载实现及缓存管理

特性

  • [x] 支持.ImageView 的带有进度动画的图片下载扩展
  • [x] 使用占位图的 ImageView 下载
  • [x] 形状 ImageView
  • [x] 包含 7 种样式进度动画
  • [x] 支持自定义控制器的 UIImageView 进度动画器,用于任何情况
  • [x] 使用 AlamofireImage 默认内存图像缓存
  • [x] 使用 AlamofireImage 默认优先级队列顺序的图像下载

要求

iOS 8.0+ Xcode 8.0+ Swift 3.0+

依赖

Alamofire 4.0+ AlamofireImage 3.1

BmoImageViewFactory

形状 ImageView

支持圆形,圆形,椭圆形,三角形,五边形,心形,星形等 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)

UIImageView 扩展

如果您想更灵活地使用,可以使用 AlamofireImage 的 ImageCache 和 ImageDownloader,自定义 ImageDownloader.ProgressHandler,获取 totalBytesRead 和 totalExpectedBytesToRead 并使用 BmoImageViewFactory.progressAnimation 来显示进度动画

使用 URL 设置图片

使用 URL 设置图片将异步下载图片并在请求完成后设置图片。

imageView.bmo_setImageWithURL(IMAGE_URL)

如果缓存则运行图片进度动画

如果缓存图片,是否运行图片进度动画。默认值为 false

imageView.bmo_runAnimationIfCatched(true)

示例

使用 CirclePie 进度风格加载新图片,不处理下载进度,只实现图片切换

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)
}

使用 CircleBrush 进度风格上传新图片

使用 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)
         }

然后将 totalBytesWrittentotalBytesExpectedToWrite 传递给 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"

作者

李哲宇,[email protected]

许可证

BmoImageLoader 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。