Ios UIScrollView:大型图像的性能不佳

Ios UIScrollView:大型图像的性能不佳,ios,performance,uiscrollview,photo-gallery,Ios,Performance,Uiscrollview,Photo Gallery,TL:DR 苹果使用什么技术使Photo.app如此快速,即使是大图像 长版本 我观看了苹果公司关于滚动视图的WWDC 2010视频,学习如何复制Photo.app分页行为和低内存利用率(PhotoScroller演示)。它工作得很好,但由于图像仅在需要时加载,当我尝试分页到另一个图像时,应用程序会在JPEG解压缩时锁定 同一个视频显示了一种平铺技术以获得更好的性能,但由于我使用的是从相机拍摄并存储在应用程序中的照片,这似乎不可行(以不同的分辨率复制每张照片会消耗太多空间-4MB对27MB)。此

TL:DR

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

长版本

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

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

苹果用什么技术让Photos.app这么快?如何在我的应用程序中获得相同的性能

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


因此,如果您仅全屏显示一幅图像,您可以执行以下操作:

在WWDC11课程104-高级滚动视图技术中,他们讨论了无限滚动以及如何实现无限滚动。基本思想是滚动视图,滚动后在滚动视图中重新定位(UIImage)视图,使其显示在中心或任何布局约束。然后可以将新UIImage加载到
UIImageView
中。由于您只有一个
UIImageView
,因此它应该非常低的内存消耗。不过,我不确定图像的加载时间会如何


可能会将下一个
UIImage
预加载到当前图像的左侧和右侧,然后在重新定位滚动视图后将其加载到
UIImageView
,这会有所帮助。

因此,如果您只是全屏显示一个图像,则可以执行以下操作:

在WWDC11课程104-高级滚动视图技术中,他们讨论了无限滚动以及如何实现无限滚动。基本思想是滚动视图,滚动后在滚动视图中重新定位(UIImage)视图,使其显示在中心或任何布局约束。然后可以将新UIImage加载到
UIImageView
中。由于您只有一个
UIImageView
,因此它应该非常低的内存消耗。不过,我不确定图像的加载时间会如何


可能将下一个
UIImage
预加载到当前图像的左侧和右侧,然后在重新定位scrollView后将其加载到
UIImageView
,这会有所帮助。

对于仍在寻找只需实现包含大量图像的scroll view的人来说


对于仍在寻找包含大量图像的滚动视图的简单实现的任何人来说,这就像实现UITableView一样简单


这就像实现UITableView一样简单

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