【问题标题】:UIScrollView with pagingEnabled = YES and a very large contentSize, the same issue as the iBooksUIScrollView with pagingEnabled = YES 和非常大的 contentSize,与 iBooks 相同的问题
【发布时间】:2014-02-08 03:46:28
【问题描述】:

当我有一个 pagingEnable = YES 且 contentSize 非常大(假设超过 20000000)的 UIScrollView 时,我遇到了这个奇怪的问题。

基本上我想像 iBooks 一样编写一个 PDF 查看器(在屏幕上显示一页)。所以 UIScrollView 的边界只是屏幕的大小,但 contentSize 将是“PDF的页码”*“页宽”。这适用于小 PDF,但对于大 PDF,分页功能似乎坏了。

例如,我有一个超过 20000 页的 94MB PDF,contentSize 的宽度将超过 20000000。对于前 3000 页(大约),分页工作正常:滚动视图总是将页面反弹到屏幕中心.但是3000页之后,你会发现弹跳变慢了,没有那么流畅了。 从某个页面开始,弹跳完全中断:页面不会显示在中心,而是卡在其他地方,就像 pagingEnable = NO。它不再弹跳了。

起初我以为我的代码有问题,但我惊讶地发现 iBooks 也有同样的问题!滚动最后一页后,我什至无法通过单击触发工具栏。所以我想知道这是一个iOS错误吗?

More Info: 调试的时候发现手指触摸后,-scrollViewDidScroll: 被多次调用,这是正常的,因为当pagingEnable = YES时UIScrollView开始弹跳。但问题是 -scrollViewDidEndDecelerating: 永远不会被调用。似乎弹跳动画在某个中间点被破坏了。很奇怪。

【问题讨论】:

  • 或者,您可以使用 UICollectionView,将 PDF 拆分,一次只在内存中存储一​​页左右...
  • 好吧,转向 UICollectionView 或 UITableView 可能是一种选择,但需要大量重构。实际上,我不认为内存是根本原因,因为 PDF 只有 94MB。 UIScrollView的弹跳功能肯定有问题。
  • 我还在 App Store 中测试了几个 PDF 阅读器:Adobe Reader、PDF Reader、PDF Pro 等。它们在单页模式下都存在同样的问题。例如,使用 Adode Reader,连续模式可以,但不能使用单页模式。所以我个人认为这是一个与 pagingEnabled(和弹跳)相关的 UIScrollView 错误。

标签: ios pdf uiscrollview ibooks


【解决方案1】:

PDF 只有 94MB

文件大小等于内存大小。 PDF 已压缩,但必须解压缩才能显示。

同样重要的是,您不需要 一个与 整本书 一样宽的滚动视图 - 您只需要一个 三页的滚动视图宽。这是因为 a) 您希望已经在回收您的页面浏览量,并且 b) 因为在任何时候只有一个页面在屏幕上可见,您可以在需要时移动内容。

您有什么理由不使用UIPageViewController,它几乎就是为此目的而设计的?

底线:你的滚动视图没有理由那么宽。它只需要几页宽,您可以移动视图以产生滚动视图比实际大得多的错觉。如果您搜索 StackOverflow,您几乎可以肯定会找到许多基本上可以做到这一点的答案。

【讨论】:

  • 谢谢,@lxt。我知道您对内存和 contentSize 的看法是正确的,我正准备将 contentSize 的宽度更改为 3 页宽。但是我还是很好奇这个bug,因为我测试的所有PDF阅读器都有这个bug,甚至包括iBooks和Adobe Reader。
  • PDF 显示的是什么 - 只是文本,还是更多图形?
  • 它有文字和图像,使用 iPad2 7.0 大约需要 130mb 内存。 iBooks 应该比我的应用程序使用更少的内存,所以我认为这不是内存问题。
  • 一台 iPad 2 只有 512MB 的 RAM,130MB 的内存其实也不少!
  • 好吧,我也用 iPad3 测试过,它也需要 130MB 的内存。我认为这对 iPad3 来说并不多,对吧?但是这个问题仍然可以重现。此外,内存理论无法解释为什么分页在前 3k 页上工作正常,但在后一页上却失败了,而内存一直保持在 130MB 左右。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多