moa 12.0.0

moa 12.0.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最后发布2019年10月
SPM支持 SPM

Evgenii Neumerzhitckii 维护。




moa 12.0.0

  • Evgenii Neumerzhitckii

Moa,为 iOS、tvOS 和 macOS 编写的 Swift 语言图像下载器

Carthage compatible CocoaPods Version Swift Package Manager compatible License Platform

Moa 是一个用 Swift 编写的图像下载库。通过设置其 moa.url 属性,它允许在图像视图中下载并显示一个图像。

imageView.moa.url = "https://bit.ly/moa_image"
  • 图像是异步下载的。
  • 使用 URLSession 进行网络和缓存。
  • 允许配置缓存大小和策略。
  • 可以不使用图像视图使用。
  • 提供闭包属性用于图像操作和错误处理。
  • 包括模拟网络响应的单元测试模式。
  • 包含调试网络问题的日志功能。

Moa hunting

"失去,就像莫亚(鳥)失去了一样" - 毛利谚语

'Hunting Moa' 绘画由 Joseph Smit(1836-1929)绘制。文件来源:[维基百科官网](http://commons.wikimedia.org/wiki/File:Hunting_Moa.jpg)。

设置

有几种方法可以将 Moa 添加到您的 Xcode 项目中。

添加源(iOS 7+)

只需将 MoaDistrib.swift 文件添加到您的 Xcode 项目中。

使用 Carthage (iOS 8+) 设置

或者,将 github "evgenyneu/moa" ~> 12.0 添加到您的 Cartfile 并运行 carthage update

使用 CocoaPods (iOS 8+) 设置

如果您正在使用 CocoaPods,请将以下文本添加到 Podfile 并运行 pod install

use_frameworks!
target 'Your target name'
pod 'moa', '~> 12.0'

使用 Swift Package Manager 设置

遗留 Swift 版本

如果您使用的是旧版本的 Swift,则设置库的先前版本。

用法

  1. import moa 添加到您的源代码(除非您使用了文件设置方法)。

  2. 将 Image View 拖到故事板中的视图中。在视图控制器中为您创建此 Image View 的 outlet 属性。或者,您也可以在代码中创建 UIImageView 对象而不是使用故事板。

  3. 将图像视图的 moa.url 属性设置为开始异步图像下载。下载完成后,图像将自动显示。

imageView.moa.url = "https://bit.ly/moa_image"

从不可信的HTTP主机加载图片

如果您的图片URL不是https,您需要将异常添加到Info.plist文件中。这将允许App Transport Security从不可信的HTTP主机加载图片。

取消下载

当以下情况发生时,自动取消对图片视图的图片下载:

  1. 图片视图被释放。
  2. 启动新的图片下载:imageView.moa.url = ...

调用imageView.moa.cancel()手动取消下载。

提供错误图片

您可以在发生图片下载错误时提供错误图片以满足需求。

imageView.moa.errorImage = UIImage(named: "ImageNotFound.jpg")
imageView.moa.url = "https://bit.ly/moa_image"

或者,您也可以提供全局错误图片,用于所有失败的图片下载。

Moa.errorImage = UIImage(named: "ImageNotFound.jpg")

显示占位图图片

以下是如何在图片视图中显示占位图图片的方法。当网络图片到达时,占位图将被替换。

imageView.image = placeholderImage
imageView.moa.url = "https://bit.ly/moa_image"

高级功能

提供完成闭包

为接收到的图片分配一个将调用的闭包。

imageView.moa.onSuccess = { image in
  return image
}

imageView.moa.url = "https://bit.ly/moa_image"
  • 下载完成后,在将图片分配给视图之前调用闭包。
  • 这是一个在显示之前操纵图片的好地方。
  • 闭包返回一个将在视图中显示的图片。如果您不希望显示图片,则返回 nil。
  • 闭包在 主队列 中调用。如果您需要执行耗时操作,请使用 onSuccessAsync 属性。
  • errorImage 提供并发生错误时,调用成功闭包。

提供错误闭包

imageView.moa.onError = { error, response in
  // Handle error
}

imageView.moa.url = "https://bit.ly/moa_image"
  • 如果在主队列中调用闭包导致图片下载失败,请在需要执行耗时操作时使用 onErrorAsync 属性。
  • 如果您需要了解错误的类型,请参阅“日志”部分。

在不使用视图下载图片

Moa 类的实例也可以不使用视图。需要保留对 Moa 实例的强引用。

let moa = Moa()
moa.onSuccess = { image in
  // image is loaded
  return image
}
moa.url = "https://bit.ly/moa_image"

清除 HTTP 会话

以下方法在当前的 URLSession 对象上调用 finishTasksAndInvalidate。将为未来的图片下载创建一个新的会话对象。

MoaHttpSession.clearSession()

您可能永远不会需要在您的应用中调用此方法。我需要定期调用它来解决一个奇怪的问题URLSession 错误,您可能不会遇到。

图片缓存

使用 Moa.settings.cache 来更改缓存设置。有关更多信息,请参阅moa 图片缓存手册

// By default images are cached according to their response HTTP headers.
Moa.settings.cache.requestCachePolicy = .useProtocolCachePolicy

// Always cache images locally regardless of their response HTTP headers
Moa.settings.cache.requestCachePolicy = .returnCacheDataElseLoad

// Change the name of the cache directory. Useful for sharing cache with the rest of the app.
Moa.settings.cache.diskPath = "MyAppSharedCache"

设置

使用Moa.settings属性来更改moa图像下载设置。

// Set the maximum number of simultaneous image downloads. Default: 4.
Moa.settings.maximumSimultaneousDownloads = 5

// Change timeout for image requests. Default: 10.
Moa.settings.requestTimeoutSeconds = 20

日志记录

您可以使用Moa日志记录器查看图像的加载时间或调试网络问题。可以使用预制的MoaConsoleLogger函数在Xcode控制台查看日志消息,或编写自定义记录器。参见日志记录手册获取更多信息。

// Log to console
Moa.logger = MoaConsoleLogger

// Load an image
imageView.moa.url = "https://bit.ly/moa_image"

// Attempt to load a missing image
imageView.moa.url = "https://bit.ly/moa_image_missing.jpg"

Logging to console with moa

单元测试

有时候,防止代码做出真正的HTTP请求是有用的。Moa包含用于测试图像下载和伪造网络响应的MoaSimulator类。参见单元测试手册获取更多信息。

// Autorespond with the given image to all image requests
MoaSimulator.autorespondWithImage("www.site.com", image: UIImage(named: "35px.jpg")!)

示例应用

该iOS示例应用展示了如何使用Moa在集合视图中加载图像。

Moa image downloader demo iOS app

备选解决方案

以下是Swift的其他图像下载库列表。

致谢

许可协议

Moa遵循MIT许可协议发布。

欢迎反馈

如果您发现任何问题、陷入困境或只是想聊天,请随时创建一个问题。我会很高兴帮助您。

•ᴥ•

本项目献给巨鸟,一种在新西兰生活的不会飞的鸟类,于15世纪灭绝。