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

标签 ios objective-c iphone cocoa-touch uiimageview

所以,这是一个相当简单的问题。 我有一个带有按钮的屏幕。每次用户点击该按钮时,我们都会让用户从他的照片中选择一张全景照片,并添加一个显示全景照片的 UIImageView。每个UIImageView都有一个大约375x150点的框架(在iPhone 6上完全显示全景照片)。
问题是,当我们添加第二个 UIImageView 时,我们在 NSLog 中收到错误:“与 assetd 的连接已中断或 assetd 已死亡”。另外,我们还遇到了轻微的用户界面“卡住”现象。但 UIImageView 显示第二张照片,我们绝对没问题。
当我们添加第三个 UIImageView 时,应用程序就会崩溃,并且 Xcode 显示“与“管理员的 iPhone 6”失去连接。”
考虑到全景照片分辨率(~13600x~3000),应用程序崩溃和 UI 卡住的原因是完全可以理解的。问题是:是否有办法(除了简单地压缩照片并在屏幕上显示调整后的版本)来显示大量全景照片而不会出现延迟?查看照片应用程序,它显示全景照片,没有任何错误,并且没有任何 UI 卡住。

最佳答案

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

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

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

Google 一下,你也许可以找到一个可以为你处理这个问题的库,我认为甚至可能有来自 Apple 的示例(请参阅 this question )。否则,自己编写它是一次有趣的学习经历。

关于ios - 尝试在一个屏幕上显示三张全景照片时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358716/

相关文章:

ios - 解析 PFFile 错误 - 尝试获取图像文件 (Swift2)

iphone - NSDictionary 中的 NSDictionary

ios - 如何在 iPhone 中单击按钮的下拉列表中显示 tableview?

ios - 带静态 UITableView 的 ECSlidingViewController

iphone - 如何从我的应用程序添加的 iCal 中删除事件?

ios - Unicode在iOS中无法正常工作

javascript - iPhone - 使用 UIWebView 评估 JavaScript 和正则表达式

IOS 自定义 pin 未显示

iphone - 编辑时如何更改 UITextField 中的颜色

ios - UIButton 具有自定义的不对称可点击区域?