epub阅读器来处理大的html文件
我正在IOS平台上创build一个epub阅读器。 基本上,它使用UIWebview来显示epub文件,我读了开源的Aepubreader的代码,发现它非常好,但不是基于文本。 我想使它基于文本和页面转向像iBooks。 所以我尝试改进Aepubreader
基本的逻辑stream程是
- 解压epub文件。
- parsing元数据(opf,toc文件)。
- 通过UIWebView加载html文件并将其绑定到UIPageViewController
除了表演,一切都很好。
假设epub有十个html文件(file1 – file10)。 file1〜file9是小尺寸(如100k),但是文件10是1MB。 当我读到file10的第一页时,加载这个1MB文件花费了很多时间。 这是可以接受的,因为这是第一次。 但是当我转到file10的第二页。 我仍然需要再次加载这个1MB的文件,然后调用一个js按页码滚动offsetx(无法为每个Apple官方文档复制一个UIWebView)。 这是不可接受的。 当这个文件翻页时,我不能让用户总是等待。
最后我得到了一个解决scheme,以避免重新加载这个大文件。 当我得到第一页的文件10显示。 我将这个可见的视图作为一个图像捕获,但不显示它,当我转到下一页,我显示这个图像的page1,同时,我把UIwebview从页面1到页面2。 像Page2.view.addSubview(webviewfrompage1)。 这将避免重新加载webview并节省时间。 但是,另一个问题来了,Page2.view.addSubview(webviewfrompage1)将导致page2 layoutsubview,这意味着page2将重绘其视图以显示webview内容。 这是一个1MB的文件内容,重绘仍然花费时间,它会卡住翻页animation。 我搜查了很多,但仍然没有解决办法。 我检查的iBooks,它的作品完美。 那大文件是怎么回事?
请让我知道,如果你有任何想法。 或其他解决scheme来处理epub显示。
提前致谢
————————————————– ——————————————-
回复torazaburo:
是的,你是对的。 我打算使用window.scroll(offsetX,offsetY)来获取下一页的内容。 但这还不够。 我想要像ibooks那样的翻页animation。 所以我使用UIPageViewController。 使用UIPageViewController意味着我必须实现以下两个代表
– (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
}
在每个deleagte,我需要分配一个viewcontroller,重新加载的url,并设置偏移到位置正确的网页。 所以每次翻页,不只是设置内容的偏移,而是分配一个新的uiwebview和重新加载url,然后设置偏移量。
torazaburo,你觉得呢?