尝试在一个屏幕上显示三张全景照片时应用程序崩溃

App crashes when trying to display three panoramic photos on one screen

所以,这是一个相当简单的问题。 我有一个带有按钮的屏幕。每次用户点击按钮时,我们都会让用户从他的照片中选择一张全景照片,并添加一个显示全景照片的 UIImageView。每个 UIImageView 都有一个约 375x150 点的帧(以在 iPhone 6 上完整显示全景照片)。
问题是当我们添加第二个 UIImageView 时,我们在 NSLog 中收到一个错误:"Connection to assetsd was interrupted or assetsd died"。另外,我们得到轻微的 UI 'freezes'。但是 UIImageView 显示第二张照片,我们完全没问题。
当我们添加第三个 UIImageView 时,应用程序崩溃并且 Xcode 显示 "Lost connection to "Admin 的 iPhone 6"."
考虑到全景照片分辨率 (~13600x~3000),完全可以理解为什么应用程序崩溃并 UI 冻结。问题是:无论如何(除了简单地压缩照片并在屏幕上显示调整后的版本)是否可以无延迟地显示大量全景照片?查看照片应用程序,它显示全景照片,没有任何错误,也没有任何 UI 冻结。

你的问题看似简单。你是对的,你的图像大小意味着你的应用程序正在努力解决内存问题。您正在将一张巨大的图像传递给 UIImageView,并希望它能为您处理一切。它不会,没有那么多数据。

内置照片应用解决此问题的方法是使用一种称为平铺的技术,并结合调整大小。它的工作原理是这样的:

  1. 最初,它显示缩小版的全景图​​。
  2. 当您开始放大时,它会获取您手指的坐标,计算它们相对于全尺寸图像的位置。
  3. 然后它计算需要从全尺寸图像中抓取哪些部分,以全分辨率获取,然后缩放并仅显示该部分。因此,继续缩放仅占用全尺寸图像所需内存的一小部分。
  4. 同时,它会计算周围区域的屏幕大小矩形,并在您决定平移时让它们做好准备,但显然不是全分辨率。
  5. 当您继续 scroll/zoom 时,将重复该过程。

Google 附近,您也许可以找到一个库来为您处理这些问题,我认为甚至可能有来自 Apple 的示例(请参阅 this question)。不然的话,自己写也是一个有趣的学习经历。