AsyncImageView 1.6

AsyncImageView 1.6

测试已测试
语言语言 Obj-CObjective C
许可 zlib
发布上次发布2016年6月

Nick Lockwood维护。



  • 作者:
  • Nick Lockwood

目的

AsyncImageView 包含一个简单的在 UIImageView 上的分类,用于在 iOS 中异步加载和显示图片,这样就不会锁定 UI,以及一个具有更多高级特征的 UIImageView 子类。AsyncImageView 与 URL 一起工作,因此它可以用于本地或远程文件。

加载/下载的图片会缓存在内存中,并在内存警告发生时自动清理。AsyncImageView 独立于 UIImage 缓存运行,但默认情况下,位于应用包根目录中的任何图片都将存储在 UIImage 缓存中,避免缓存图片的重复。

该库还可以用于独立于 UIImageView 加载和缓存图片,因为它提供了对底层加载和缓存类的直接访问。

支持的操作系统和 SDK 版本

  • 支持的构建目标 - iOS 9.3 (Xcode 7.3, Apple LLVM 编译器 7.1)
  • 最早支持部署目标 - iOS 7.0
  • 最早兼容部署目标 - iOS 4.3

注意:'支持' 表示库已针对此版本进行测试。'兼容' 表示库应在 iOS 版本上运行(即它不依赖于任何不可用的 SDK 功能),但不再为此版本的兼容性进行测试,可能需要调整或错误修复以正确运行。

ARC 兼容性

自 1.5 版本起,AsyncImageView 需要 ARC。如果您希望在不支持 ARC 的项目中使用 AsyncImageView,只需将 -fobjc-arc 编译器标志添加到 AsyncImageView.m 文件中。为此,请转到您的目标设置中的 '构建阶段' 选项卡,打开 '编译源' 组,双击列表中的 AsyncImageView.m,并在弹出菜单中键入 -fobjc-arc。

如果您希望将整个项目转换为 ARC,请取消注释 AsyncImageView.m 中的 #error 行,然后在 Xcode 中运行 '编辑 > 重构 > 转换为 Objective-C ARC...' 工具,并确保您希望使用 ARC 的所有文件都已勾选(包括 AsyncImageView.m)。

线程安全性

AsyncImageView 在内部使用线程,但 AsyncImageView 的所有外部接口都不是线程安全的,您不应在除主线程之外调用任何 AsyncImageView 类的任何方法或设置任何属性。

安装

要在一个应用中使用 AsyncImageView,只需将 AsyncImageView 类文件拖入您的项目中。

使用方法

您可以像使用带UIImageView一样使用AsyncImageView类。如果想在Interface Builder中使用它,像往常一样将一个普通的UImageView或媒体图片拖到视图中,然后在检查器中将它的类更改到AsyncImageView。

在某些情况下无法使用AsyncImageView时,例如UIButton或UITableView中嵌入的imageView,UIImageView分类意味着您仍然可以将imageURL属性设置在imageView上以在后台加载图片。但是,这样您将无法获得AsyncImageView类的先进功能(如加载指示器),除非您自己重新实现。

要加载或下载图片,将imageURL属性设置为所需图片的URL。这可以是远程URL或指向应用程序包或文档文件夹的本地文件URL。

如果想在图像加载期间显示占位符图片,只需手动设置UIImageView的图片属性为您的占位符图片,一旦通过URL指定的图片加载完毕,它将被覆盖。

如果您想在主要图片加载的同时异步加载较小的缩略图,只需先设置缩略图URL,然后是完整图片URL。AsyncImageLoader将确保图片按正确顺序加载。如果大图片已经缓存,或由于某些原因先加载,则取消缩略图图片加载。

要检测图片加载完成,可以使用NSNotificationCenter结合AsyncImageLoadDidFinish通知,或者您可以使用KVO(键值观察)在UIImageView的图片属性上设置观察者。当图片加载完成时,将设置图片,您可以使用KVO来检测并相应地做出反应。

默认情况下,所有加载的图片都会被缓存,如果应用加载大量图片,缓存将不断累积,直到触发内存警告。您可以通过根据您自己的维护逻辑手动从缓存中删除项来避免内存警告。您还可以通过在加载图片前将共享AsyncImageLoader的cache属性设置为nil来禁用缓存,或对特定图片禁用缓存(加载图片后将其设置回[AsyncImageLoader sharedInstance]以重新启用缓存)。

发布说明

版本1.6

  • 现在需要iOS 7或更高版本
  • 更新了内部网络堆栈以使用NSURLSession
  • 添加了本地文件的快速路径
  • 修复了最新Xcode上的警告
  • 将文档移动到头文件中
  • 添加了nullability注释
  • 添加了activityIndicatorColor
  • 现在支持加载@3x图像

版本1.5.1

  • 修复了意外的递归
  • 修复了不匹配的选择器

版本1.5

  • 现在正确地在ARM64上工作
  • 现在需要ARC(有关详细信息,请参阅README)
  • 在绘制之前解压缩加载的图像以避免卡顿
  • 如果设置了nil URL,则不再显示旋转器
  • 删除了多余的crossfadeImages属性
  • 现在符合-Weverything警告级别
  • 添加了podspec

版本1.4

  • 加载队列现在是LIFO(先进先出)以获得更好的性能
  • 删除了AsyncImageCache类(用普通NSCache替换)
  • 固定了在不匹配UIImage缓存中检查重复项时的某些错误
  • AsyncImageView不再需要QuartzCore框架

版本1.3

  • 为AsyncImageView添加了额外的效果选项
  • 添加了额外的AsyncImageLoader方法
  • 修复了示例中的问题
  • 添加了效果图
  • AsyncImageView现在在第一次设置图片时淡入
  • 修复了AsyncImageView中的内存泄漏
  • 更新ARC Helper
  • 添加了一个带有加载旋转器和交叉淡入效果的新AsyncImageView类。
  • 修复了设置nil imageURL时的崩溃
  • 修复了图片加载失败时的崩溃。
  • 现在需要QuartzCore框架。
  • 现在需要iOS 4.x版本。

版本1.2.3

  • 改善了排队行为,以确保缓存中的图片不会被队列中加载缓慢的图片阻止显示。
  • 添加了示例项目。

版本1.2.2

  • 修复了访问已释放的imageURL时崩溃的问题。
  • 修复了一些线程并发问题。

版本1.2.1

  • 修复了尝试加载损坏的图像或非有效图像文件的URL时崩溃的问题。

版本1.2

  • 现在在加载后自动在后台线程中解压缩图像,然后再显示。这减少了在滚动视图(如UITableView或carousel)中显示图像时的卡顿。
  • 现在默认将位于应用程序包根目录中的图像存储在UIImage imageNamed缓存中,而不是在AsyncImageCache中。这避免了通过不同机制加载的图像的重复。
  • 现在可以禁用缓存,或为不同的图像使用多个不同的缓存。

版本1.1

  • AsyncImageView现在是UIImageView的一个分类,而不是一个独立类,使其更容易与现有代码或类一起使用。
  • 现在使用异步NSURLConnection进行加载,允许在加载过程中取消图像加载。
  • 已加载的图像现在在内存中缓存,并且去重是自动处理的。
  • 添加了公开的AsyncImageCache和AsyncImageLoader类,用于对加载和缓存进行细粒度控制。

版本1.0

  • 首次发布