所以,这是一个相当简单的问题。
我有一个带有按钮的屏幕。每次用户点击该按钮时,我们都会让用户从他的照片中选择一张全景照片,并添加一个显示全景照片的 UIImageView。每个UIImageView都有一个大约375x150点的框架(在iPhone 6上完全显示全景照片)。
问题是,当我们添加第二个 UIImageView 时,我们在 NSLog 中收到错误:“与 assetd 的连接已中断或 assetd 已死亡”。另外,我们还遇到了轻微的用户界面“卡住”现象。但 UIImageView 显示第二张照片,我们绝对没问题。
当我们添加第三个 UIImageView 时,应用程序就会崩溃,并且 Xcode 显示“与“管理员的 iPhone 6”失去连接。”
考虑到全景照片分辨率(~13600x~3000),应用程序崩溃和 UI 卡住的原因是完全可以理解的。问题是:是否有办法(除了简单地压缩照片并在屏幕上显示调整后的版本)来显示大量全景照片而不会出现延迟?查看照片应用程序,它显示全景照片,没有任何错误,并且没有任何 UI 卡住。
最佳答案
你的问题看似简单。你是对的,图像的大小意味着你的应用程序正在解决内存问题。您将一个巨大的图像传递给 UIImageView
并希望它能为您处理所有事情。不会的,没有那么多数据。
内置照片应用程序解决此问题的方法是使用一种称为平铺的技术,并结合调整大小。它的工作原理如下:
- 最初,它显示全景图的缩小版本。
- 当您开始放大时,它会获取您手指的坐标,计算它们相对于全尺寸图像的位置。
- 然后它会计算需要从全尺寸图像中抓取哪些部分,以全分辨率获取该部分,然后缩放并仅显示该部分。因此,持续缩放仅占用全尺寸图像所需内存的一小部分。
- 同时,它会计算周围区域的屏幕尺寸矩形,并在您决定平移时让它们做好准备,但显然不是在全分辨率下。
- 当您继续滚动/缩放时,会重复该过程。
Google 一下,你也许可以找到一个可以为你处理这个问题的库,我认为甚至可能有来自 Apple 的示例(请参阅 this question )。否则,自己编写它是一次有趣的学习经历。
关于ios - 尝试在一个屏幕上显示三张全景照片时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358716/