LazyImage 7.0.1

LazyImage 7.0.1

Lampros Giampouras维护。



LazyImage 7.0.1

Version License Platform Build Status

LazyImage是一个简单的iOS图片懒加载功能,用Swift编写。通过集成非常轻量级的代码,LazyImage提供了易于使用的方式,让您对图片有完全的控制。

功能

  • 在后台线程上的异步图片下载。(主线程永远不会被阻塞)
  • 以实例化的方式实现,以便更好地进行单元测试。
  • 对下载的图片进行临时缓存,并自动进行OS清洁。
  • 设置本地项目的图片作为占位符加载指示器,直到实际图像可用。
  • 如果imageView的大小为0,它将在请求之前将其维度设置为40x40。这适用于默认的UITableViewCells,因为没有初始图像时,imageView将被隐藏。

对您的图片数据的完全控制

  • 保证相同的图片URL不会再次下载,而是将它们从缓存中获取。
  • 强制下载选项来覆盖缓存,并下载相同的图片。
  • 从缓存中清除与特定URL对应的图片的选项,以便它们可以重新下载一次,而不是持续强制下载。
  • 当操作完成时通知调用者,如果有的话提供描述性错误。
  • 图像可以自动缩放到特定的视图尺寸,以实现最佳性能和减少内存分配。
  • 为保存图片设置缓存图像尺寸比比率。快速显示。🚀.

安装 - Cocoapods

pod 'LazyImage'

用法

LazyImageView

在图像视图上显示图像的最简单方法是将其类型设置为LazyImageView,并设置imageURL属性。下载的图像将被缓存到您图像视图的大小,以获得最佳性能。

示例

@IBOutlet weak var imageView: LazyImageView!

//Normal image
imageview.image = UIImage(named:"someAsset")

//Network image
imageView.imageURL = "https://domain.com/thepathtotheimage.png"

//Option to cancel the request
let canceled = imageView.cancelRequest()

如果想要知道图像是否无法检索。

请使用LazyImageViewDelegate。

@IBOutlet weak var imageView: LazyImageView!

imageView.delegate = <your delegate target with conforms to LazyImageViewDelegate>

//Set the image URL
imageView.imageURL = "https://domain.com/thepathtotheimage.png"

//If an error occurs this will be called
//url is the image URL failed to be fetched.
func errorDownloadingImage(url:String) -> Void {

}

LazyImage

为了完整控制,您可以在任何UIImageview上使用LazyImage对象。

以下是一些加载图像的示例

在imageView上显示图像

创建一个懒图像对象,用于存储实例。

最好为每个负责图像的对象创建一个实例

lazy var lazyImage:LazyImage = LazyImage()

无完成闭包

self.lazyImage.show(imageView:self.imageView, url:"http://something.com/someimage.png")

带有转轮

self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png")

带有完成闭包

self.lazyImage.show(imageView:self.imageView, url:"http://something.com/someimage.png") {
(error:LazyImageError?) in
//Image loaded. Do something..
}
self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png") {
(error:LazyImageError?) in
//Image loaded. Do something..
}

显示带有本地图片占位符的图片

带有完成功能

self.lazyImage.show(imageView:self.imageView, url:"http://something.com/someimage.png", defaultImage:"someLocalImageName") {
(error:LazyImageError?) in
//Image loaded. Do something..
}

以缩放尺寸显示图片以获得更好的性能

带有旋转器和新的缩放尺寸。图片已调整为所需尺寸,以实现最佳性能

let newSize = CGSize(width: imageViewWidth height: imageViewHeight)
self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) {
(error:LazyImageError?) in
//Image loaded. Do something..
}

即使存储在缓存中,也强制下载具有缩放尺寸的图片

有时,特定的URL会持续更改对应的图片。

带有完成功能

let newSize = CGSize(width: imageViewWidth height: imageViewHeight)
self.lazyImage.showOverride(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) {
(error:LazyImageError?) in
//Image loaded. Do something..
}

带有完成功能、旋转器和新的缩放尺寸

let newSize = CGSize(width: imageViewWidth height: imageViewHeight)
self.lazyImage.showOverrideWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) {
(error:LazyImageError?) in
//Image loaded. Do something..
}

处理图片大小和缓存问题

通常,展示针对观看尺寸优化过的图片是处理内存的最佳方式。您可以通过以下两种方式实现。

  • 正如上述示例中所示,使用尺寸参数。该尺寸将用于将图片缩小到您的特定尺寸。这将在运行时发生,这意味着原始图片将存储在缓存中。调整大小将在加载时执行。调整大小/图片加载将在后台线程中执行,UI永远不会被阻塞。主线程只用于显示。
let newSize = CGSize(width: imageViewWidth height: imageViewHeight)
self.lazyImage.showWithSpinner(imageView:self.imageView, url:"http://something.com/someimage.png", size:newSize) {
(error:LazyImageError?) in
//Image loaded. Do something..
}
  • 设置缓存大小是第二种选择。只要实例处于活跃状态,这个设置就会导致图片在缓存中存储为已调整大小。加载您为特定尺寸新鲜调整大小的图片将非常快🚀.
let imageSize = CGSize(width: yourViewWidth, height: yourViewHeight)

//Set default image size ratio
self.lazyImage.setCacheSize(imageSize)

self.lazyImage.showWithSpinner(imageView:self, url:imageURL) {
    (error:LazyImageError?)  in
}

清除特定图片URL的缓存

有时候你可能只需重新下载一次与原名完全相同的具体图片。

如果你设置了缓存大小,清除缓存将清除具有特定大小比例的图片。

清除缓存

let imageURLs:[String] = ["https://someimage.png", "https://someotherimage.png"]
self.lazyImage.clearCacheForURLs(urls: urls)
//And you're done

预取

你可以预取一张图片并将其保存以备快速显示。

self.lazyImage.prefetchImage(url: "https://someimage.png")

勿忘UIImageviews,只获取UIImage

self.lazyImage.fetchImage(url: url) {
 (image:UIImage?, error:LazyImageError?) in
//image has the UIImage
}

取消图片获取请求

self.lazyImage.cancel()

贡献

欢迎贡献。克隆项目并进行改进,然后创建pull request。项目自带一个基本的测试应用,您可以在此应用中测试您的新特性。您可以在Pods/Development Pods/LazyImage下找到库代码。

许可协议

遵循Apache许可证第2版:https://apache.ac.cn/licenses/LICENSE-2.0