【问题标题】:UIScrollView: Bad performance with large imagesUIScrollView:大图像性能不佳
【发布时间】:2012-10-22 12:07:32
【问题描述】:

TL:DR

Apple 使用什么技术使 Photo.app 如此快速,即使是大图像?

加长版

我观看了 Apple 的 WWDC 2010 有关滚动视图的视频,以了解如何复制 Photo.app 分页行为和低内存利用率(PhotoScroller 演示)。它运作良好,但由于图像仅在需要时加载,所以当我尝试分页到另一个图像时,应用程序在 JPEG 被解压缩时锁定。

同一视频展示了一种平铺技术以获得更好的性能,但由于我使用的是从相机拍摄并存储在应用程序中的照片,这似乎不可行(每张照片有多个副本,分辨率不同,会消耗太多空间 - 4MB vs 27MB)。此外,使用 iExplorer 我注意到 Photo.apps 中只有每张照片的副本(它甚至没有画廊的小缩略图副本)。

Apple 使用什么技术让 Photos.app 如此快速?如何在我的应用中获得相同的性能?

如果这应该在这里还是在程序员上,我有点困惑, 因为问题中没有代码,但 F.A.Q.说那个算法 问题是 Stackoverflow 的一部分,这里的标签与之匹配 更好。

【问题讨论】:

    标签: ios performance uiscrollview photo-gallery


    【解决方案1】:

    因此,如果您只全屏显示一张图片,您可以这样做:

    在 WWDC11 Session 104 - Advanced Scroll View Techniques 中,他们讨论了无限滚动以及如何进行。基本思想是滚动视图并在滚动视图后重新定位滚动视图内的 (UIImage) 视图,使其居中或无论您的布局约束是什么。然后您可以将新的 UIImage 加载到UIImageView 中。由于您只有一个UIImageView,因此它的内存消耗应该非常低。不过,我不确定图像的加载时间会如何。

    也许将下一个UIImage 预加载到当前图像的左侧和右侧,然后在重新定位滚动视图后将其加载到UIImageView 中可以提供帮助。

    【讨论】:

    • PhotoScroller 是我用作应用程序基础的演示。为了获得良好的性能,它使用了平铺技术,由于磁盘空间的使用,这在我的情况下是不可行的。此外,即使预先加载了图像的左右,如果用户尝试快速分页,应用程序将无法在新图像加载时暂时跟上并锁定。它还会消耗大量内存(如 Photo Scroller 演示中所述)
    • 我提到的 WWDC 视频是关于 PhotoScroller 的。我观看了视频并下载了源代码以复制处理分页的部分。但就像 Eliza(视频中的演示者)提到的那样,PhotoScroller 存在分页性能问题,为了解决这个问题,他们使用了平铺。 Photos.app 设法在不使用平铺的情况下解决了它,我想知道它与 PhotoScroller 有什么不同(除非我错过了一些东西并且 PhotoScroller 的源代码确实在某个地方解决了这个问题,即使没有平铺,并且没有显示在视频中)
    【解决方案2】:

    对于仍在寻找简单实现包含大量图像的滚动视图的任何人。

    https://github.com/sumofighter666/ReusableScrollView

    就像实现 UITableView 一样简单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多