Matisse 3.0.0

Matisse 3.0.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2018年11月
SPM支持SPM

Markus Gasser维护。



Matisse 3.0.0

  • Markus Gasser

Carthage compatible CocoaPods License MIT

Matisse

Matisse是一个受Picasso启发的iOS图像检索和缓存库。

使用方法

使用Matisse,您只需一行代码就可以下载并在图像视图中显示一个图像

Matisse.load(imageURL).showIn(imageView)

这会自动处理下载、缓存和显示视图中的图像。如果您在UITableViewDataSource中使用此代码,它还确保即使在单元格重用的情况下也能显示正确的图像。

如果要将图像调整大小以适应图像视图(通常是个好主意),您也可以这样做

Matisse.load(imageURL).resizeTo(size: myImageSize).showIn(imageView)

如果在不需要将图像加载到视图中,只需获取图像,您可以像这样获取它

Matisse.load(imageURL).resizeTo(size: myImageSize).fetch { request, image, error in
    if let fetchedImage = image {
       // do something with the image
    } else {
       // handle the error
    }
}

Matisse配置

可以通过自定义图像加载器、自定义缓存(磁盘和内存)来配置共享的Matisse实例。对于更高级的功能,您还可以使用自定义请求处理器来管理整体图像加载过程。

您只能在第一次使用Matisse加载图像之前对其进行配置。如果您的应用程序需要多种配置,请参阅《创建多个Matisse实例》。

配置图片加载器

默认情况下,Matisse 使用一个名为 DefaultImageLoader 的加载器,该加载器使用 URLSession.sharedSession() 加载图像。

要自定义图片加载行为,您可以提供不同的 URLSession,如下所示

Matisse.useImageLoader(DefaultImageLoader(myCustomURLSession))

如果这不满足您的需求,您可以实现一个自定义的 ImageLoader 子类并实现 loadImage(forRequest:completion:)。还有一个 ImageLoaderBase 类,旨在为图像加载器提供公共功能。

配置图片缓存

Matisse 使用两个缓存来存储图像。一个高速缓存和一个低速缓存。

当尝试解析一个 ImageRequest 时,会同步调用高速缓存。这个操作阻塞主线程,因此应该尽可能快。应避免在高速缓存中进行磁盘访问和其他昂贵的操作。

从后台线程以异步方式调用低速缓存。由于这种方式不会阻塞主线程,因此缓存可以自由使用更昂贵的操作(如磁盘IO)。

这两个缓存都实现了 ImageCache 协议。默认情况下,Matisse 使用 MemoryImageCache 的实例作为高速缓存,而使用 DiskImageCache 作为低速缓存。

您可以通过以下方式重写(或禁用)缓存

// provide a custom ImageCache implementations
Matisse.useFastCache(myFastCache)
Matisse.useSlowCache(mySlowCache)

// disable the caches
Matisse.useFastCache(nil)
Matisse.useSlowCache(nil)

提供自定义请求处理程序

要尽量控制图像加载过程,您可以提供自己的 ImageRequestHandler。当 Matisse 无法从缓存解析请求(或如果它们被禁用)时,将调用此请求处理程序。

这给您处理图像加载提供了最多的自由度,但在大多数情况下可能更为复杂。

如下所示提供自己的 ImageRequestHandler

Matisse.useRequestHandler(myRequestHandler)

注意:当您提供自定义请求处理程序时,将忽略图像加载器。同样,如果提供了自定义图像加载器,任何自定义请求处理程序都将被默认处理程序替换。

创建多个 Matisse 实例

如果您需要为 Matisse 配置多个配置(例如不同的图像加载器或缓存),则可以创建 Matisse 类的本地实例。

创建 Matisse 实例时,您需要提供一个 MatisseContext。此上下文提供实际的图像检索。要创建一个,您需要提供缓存和请求处理器。

// use defaults or provide custom instances
let fastCache = MemoryImageCache()
let slowCache = DiskImageCache()
let requestHandler = DefaultImageRequestHandler()

// create a local matisse instance
let context = MatisseContext(fastCache: fastCache, slowCache: slowCache, requestHandler: requestHandler)
let matisse = Matisse(context: context)

// then use it like you would use the shared instance
matisse.load(url).showIn(imageView)

自定义图像转换

Matisse 提供了一个内置转换,将图像调整到目标大小。

如果您需要不同的图像转换,可以实现一个自定义的 ImageTransformation。您需要一个函数来转换 CGImage,以及一个描述,准确地描述您的转换。描述很重要,因为它用于检查尝试从缓存中加载图像时请求是否相同。

要使用自定义转换,请在加载图像时应用它,如下所示

// ColorTransformation would be your custom transformation
let myTransformation = ColorTransformation(type: "BlackAndWhite")

Matisse.load(url)
    .transform(myTransformation) // use the custom transformation
    .showIn(imageView)

为方便起见,请考虑将扩展添加到 ImageRequestBuilder

extension ImageRequestBuilder {
    
    func colorize(type: String) -> Self {
        return transform(ColorTransformation(type: type))
    }
}

然后您可以像这样使用它

Matisse.load(url)
    .colorize(type: "BlackAndWhite") // use the custom transformation
    .showIn(imageView)

安装

Carthage

要通过 Carthage 安装此库,请将以下内容添加到您的 Cartfile

github "konoma/matisse" ~> 3.0

然后运行标准的 carthage update 进程。

CocoaPods

要通过 CocoaPods 安装此库,请将以下内容添加到您的 Podfile

pod 'Matisse', '~> 3.0'

然后运行标准的 pod update 进程。

许可证

Matisse 采用 MIT 许可证 发布。