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

eoL*_*hic 2 iphone cocoa-touch objective-c uiimageview ios

因此,这是一个非常简单的问题。我有一个带有按钮的屏幕。每次用户点击按钮时,我们都会让用户从其“照片”中选择一张全景照片,并添加一个UIImageView来显示全景照片。每个UIImageView都有一个〜375x150点的帧(以在iPhone 6上完全显示全景照片)。
问题是,当我们添加第二个UIImageView时,我们在NSLog中收到一个错误:“到资产的连接被中断或资产被终止”。另外,我们会出现轻微的UI“冻结”。但是UIImageView显示第二张照片,我们绝对可以。
当我们添加第三个UIImageView时,该应用程序将崩溃并且Xcode显示“与“管理员的iPhone 6”的连接断开”。
考虑到全景照片分辨率(〜13600x〜3000),应用崩溃并导致UI死机的原因是完全可以理解的。问题是:是否存在(除了简单地压缩照片并在屏幕上显示调整大小的版本以外)以显示大量全景照片而没有滞后?看着“照片”应用程序,它将显示全景照片,没有任何错误,并且没有任何UI冻结。

dan*_*n78 5

您的问题看似简单。没错,图片大小意味着您的应用正在解决内存问题。您正在向a传递巨大的图像,UIImageView并希望它将为您处理所有事情。不会,没有那么多数据。

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

  1. 最初,它显示了全景图的缩小版本。
  2. 当您开始放大时,它会获取手指的坐标,并计算它们相对于全尺寸图像的位置。
  3. 然后,它会从全尺寸图像中计算出需要抓取的部分,并在完全分辨率下获取,然后缩放并仅显示该部分。因此,连续缩放仅占用完整尺寸图像所需存储空间的一小部分。
  4. 同时,它会为周围区域计算屏幕尺寸的矩形,并在您决定平移时让它们准备就绪,但显然不是全分辨率的。
  5. 当您继续滚动/缩放时,将重复此过程。

在Google周围,您也许可以找到一个可以为您解决的图书馆,而且我认为甚至有Apple提供的示例(请参见此问题)。否则,自己编写是一种有趣的学习经历。