【发布时间】: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