epub阅读器处理大html文件

时间:2013-01-10 08:37:09

标签: ios performance uiwebview epub uipageviewcontroller

我正在IOS平台上创建一个epub阅读器。基本上,它使用UIWebview来显示epub文件,我阅读了开源Aepubreader的代码并发现它非常好但不是基于文本的。我想让它像iBooks一样基于文本和翻页。 所以我尝试改进Aepubreader

基本逻辑流程是

  1. 解压缩epub文件。
  2. 解析元数据(opf,toc文件)。
  3. 通过UIWebView加载html文件并将其绑定到UIPageViewController
  4. 除了表演之外,一切都很好。

    假设epub有十个html文件(file1 - file10)。 file1~file9是小尺寸(如100k),但文件10是1MB。 当我读到file10的第一页时,加载这个1MB文件需要花费很多时间。这是可以接受的,因为这是第一次。 但是当我转向file10的第二页时。我仍然需要再次加载这个1MB文件并调用js按页码滚动offsetx。(无法复制每个Apple官方文档的UIWebView)。这是不可接受的。我不能让用户在翻页时始终等待。

    最后我得到了一个避免重新加载这个大文件的解决方案。 当我显示file10的第一页时。我将这个可见视图捕获为图像,但不显示它,当我转向下一页时,我显示了page1的这个图像,同时,我将UIwebview从page1提供给page2。比如Page2.view.addSubview(webviewfrompage1)。这样可以避免重新加载webview并节省时间。 但是,另一个问题即将到来,Page2.view.addSubview(webviewfrompage1)将导致page2 layoutsubview,这意味着page2将重绘其视图以显示webview内容。这是一个1MB的文件内容,重新绘制仍然需要花费的时间,并且它会阻止页面转动动画。  我搜索了很多,但仍然没有解决方案。  我检查iBooks,它完美无缺。它是如何处理大文件的?

    如果您对此有任何疑问,请与我们联系。或处理epub显示的其他解决方案。

    提前致谢

    ----------------------------------------------- ----------------------------------------------

    回复torazaburo:

    是的,你是绝对正确的。我打算使用window.scroll(offsetX,offsetY)来获取下一页内容。 但这还不够。我希望页面转动动画就像ibooks一样。所以我使用UIPageViewController。使用UIPageViewController意味着我必须实现以下两个委托

    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { }

    • (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {

    }

    在每个deleagte中,我需要分配一个viewcontroller,重新加载url并将offset设置为位置正确的页面。因此,每次翻页时,它都不仅仅是 设置内容的偏移量但是分配一个新的uiwebview并重新加载url然后设置偏移量。

    torazaburo,您怎么看?

0 个答案:

没有答案