我正在做电子书阅读器应用程序,就像iBooks一样。我成功读取了一个.epub文件。但我的问题是: -
我必须添加字体大小增加和减少以及字体更改功能。当我增加和减少字体大小时,我必须调整页面。如何在页面中拆分HTML字符串?
您可以在两张图片中看到。更改字体大小后,html字符串将被分离,格式化将被折叠。
提前致谢
答案 0 :(得分:3)
嗯,这真是个难题......
我有一个方法可以将HTML页面分成两部分:第一页和其他部分。然后,您可以在" rest"上重复调用该方法。得到所有页面。
这是第一个应该以某种方式工作的算法。但是,存在优化机会和隐藏问题:
你应该做的事情就像二元搜索而不是线性搜索。所以$ num_words不应该是100,99,98,97,96,...,62,而是100,80,60,70,65,64,63,62。问webview怎么会更快它比预期更大或更小。即如果webview的高度超过30%,则意味着你应该减少(1-1 /(1 + 30%))= 23%,所以你应该在第一步中将字数乘以0.77
如果文档中有硬分页符,则您的功能应考虑到这一点。
通过调用webView.scrollView.contentSize.height获得UIWebView的高度。我认为你必须等待UIWebView完成渲染才能检查高度。
如果您对HTML的结构有了更多了解,您可以使用UIWebView中的-stringByEvaluatingJavaScriptFromString:
方法添加单个单词,看看会发生什么。这样webview就不必一直重新渲染所有内容。
注意:通过"渲染"我的意思是调用-loadHTMLString:baseURL:
,然后等待调用-webViewDidFinishLoad:
委托方法。
如果性能是一个问题,那么以某种方式在Javascript中对此算法进行编码可能会更快(对于设备而言),但我认为这会更难。
答案 1 :(得分:2)
最后我得到了回答。这很简单。在ios 7中,您不需要为分页或任何逻辑编写javascript。
只需设置UIWebview属性即可。这是我的代码。
self.webView.paginationMode = UIWebPaginationModeLeftToRight;
self.webView.paginationBreakingMode = UIWebPaginationBreakingModePage;
self.webView.scrollView.delegate = self;
self.webView.scrollView.pagingEnabled = YES;
self.webView.scrollView.alwaysBounceHorizontal = YES;
self.webView.scrollView.alwaysBounceVertical = NO;
self.webView.scrollView.bounces = YES;
以下是示例代码a:https://github.com/kalpesh22m/Epub-Reader-With-Pegination
答案 2 :(得分:1)
首先增加你需要在em中给出字体大小的字体大小。在使用em之前,你需要给出body-size:62.5%,div中的元素给出像1.2em这样的字体大小(将作为12px)。所以当你想增加任何Div的字体大小时,你只需要增加10%的字体大小。 并且您不需要计算用于调整页面的字符,如果您正在制作响应式书籍,这不是一个好习惯。使用列属性off css,让css处理你的页面流。 请参阅以下链接了解字体大小和可流动的html结构
<a href="http://jsfiddle.net/hJ6Mj/4/">Js Fiddle</a>
并且还看到&#34;用于chrome&#34;的readium js。这将为您提供有关如何在浏览器上呈现epub文件的想法