UIScrollView使用pagingEnabled = YES和一个非常大的contentSize,与iBooks的问题相同

时间:2014-02-08 03:46:28

标签: ios pdf uiscrollview ibooks

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

基本上我想像iBooks一样编写PDF查看器(在屏幕上显示一页)。因此,UIScrollView的界限只是屏幕的大小,但contentSize将是“PDF的页面编号”*“页面宽度”。这适用于小PDF,但是对于大型PDF,分页功能似乎已经破解。

例如,我有一个超过20000页的94MB PDF,contentSize的宽度将超过20000000.对于前3000页(大约),分页工作正常:scrollview始终将页面反弹到屏幕中心。但是在3000页之后,你会发现弹跳变得缓慢而不是那么平滑。 从某个页面开始,弹跳完全破碎:页面不会显示在中心,而是停留在其他地方,就像pagingEnable = NO。它不再反弹。

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

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

1 个答案:

答案 0 :(得分:0)

  

PDF只有94MB

文件大小 与内存中的大小相等。 PDF是压缩的,但必须解压缩才能显示。

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

你是否有任何理由不使用UIPageViewController,这是为了这个目的而设计的?

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