LDOTiledView 1.0.0

LDOTiledView 1.0.0

Sebastian Ludwig 维护。




  • Julian Raschke 和 Sebastian Ludwig GbR

LDOTiledView

Version License Platform

LDOTiledView demo

使用方法

  • LDOTiledView 添加到您的视图层次结构中(您可能希望将其嵌入到一个 UIScrollView 中)。
  • 设置 maximumZoomLevelimageSizetileSize(详情见下文)。
  • 实现 LDOTiledViewDataSource 的唯一方法
    func tiledView(_ tiledView: LDOTiledView, tileForRow row: Int, column: Int, zoomLevel: Int) -> UIImage?

缩放级别与缩放比例

LDOTiledView 的典型用法是能够放大图像。这是通过嵌入到 UIScrollView 中来实现的。然而,UIScrollView.zoomScale 指的是内容大小(作为一个区域),因此是按指数增长的。重复地加倍图像尺寸,缩放比例增长如下:1, 2, 4, 8。

LDOTiledView 使用更直观的缩放级别概念。在其最小的分辨率下,图像处于缩放级别 1。在同一尺寸的两倍大小为级别 2,再次加倍大小为级别 3,依此类推。缩放级别线性增长,并且在每个级别上,图像的大小是上一个级别的两倍。这也适用于瓦片地图(如 Google Maps、OpenStreetMaps 等)。

图像大小

图像尺寸指的是图像在最小缩放级别下的点尺寸。

以下表格阐述了图像尺寸与缩放级别之间的关系。

缩放级别 图像尺寸 [pt] 2x Retina [px] 3x Retina [px]
1 410 x 890 820 x 1780 1230 x 2670
2 820 x 1780 1640 x 3560 2460 x 5340
3 1230 x 2670 2460 x 5340 3690 x 8010
4 1640 x 3560 3280 x 7120 4920 x 10680

这意味着要在iPhone Xs Max上全屏幕图像进行四倍缩放,你需要一张52兆像素的原始图像。在这个例子中,maximumZoomLevel会设置为4,而imageSize会是410 x 890。

瓦片尺寸

CATiledLayer及其LDOTiledView背后的基本思想是,不是一次性将一个大图像加载到内存中,而是将图像分割成更小的方块,并且只有当前可见的方块会被加载。这意味着无论图像有多大,任何给定时间都大约会加载相同数量的方块。因此,内存消耗(几乎是)恒定的,与图像尺寸无关。

瓦片尺寸指定了将大图像分割成的小方块的尺寸。它是以点为单位定义的。这意味着如果您将瓦片尺寸设置为256x256,则视网膜瓦片必须是512x512像素。因此,非Retina、Retina和Super Retina图像将被分割成相同数量的瓦片。

瓦片加载

关于底层的CATiledLayer的一个常见抱怨是,它有时会显示黑色方块而不是图像瓦片。在我们的经验中,这实际上并不是CATiledLayer的问题,而是由失败的图像加载造成的。有时,如果在调用得太频繁时使用UIImage(named:),它将返回nil。(这可能是由于UIImage(named:)执行的缓存,以及瓦片加载是异步执行的事实所引起的。)对于我们来说,将图像作为Data加载并从该数据创建UIImage工作得非常完美。YMMV。

生成瓦片

虽然对您如何创建图像瓦片没有严格的要求,但我们包含了一个小的Ruby脚本以帮助您开始。它基于libvips,因此如果您想使用它,请确保已安装。

脚本使用最大缩放级别和最高比例(1x/2x/3x)的输入图像。然后它将图像缩小到所有较小缩放级别并缩放。

地球示例的瓷砖是通过以下命令创建的:

$ ./gen_tiles.rb Example/Demo\ Images/Earth/earth.jpg -scale 2 -scale 3 -levels 4
Level 1 image size: 450 x 450

请检查gen_tiles.rb --help获取更多信息。

示例

要运行示例项目,首先克隆存储库,然后从示例目录运行pod install

安装

LDOTiledView可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile:

pod 'LDOTiledView'

作者

Raschke & Ludwig GbR, https://www.lurado.com/

许可证

LDOTiledView在MIT许可证下可用。请参阅LICENSE文件以获取更多信息。

致谢

灵感来源于并基于JCTiledScrollView

示例项目中的地球图像来自NASA地球观测站:Robert Simmon使用NOAA环境可视化实验室的Suomi NPP VIIRS图像创作的NASA地球观测图像。Suomi NPP是NASA、NOAA和国防部之间合作的结果。