DTCoreText
背景:使用DTCoreText实现epub阅读器的内容排版
基础准备:coretext,HTML+CSS渲染机制,epub文件格式
一:ios端epub实现:主要是两种,coretext,webview,二者的对比不再赘述,简单点说就是,coretext需要自己去解析html和对应的css样式,并合并起来使用coretext展示,但是效率高。webview可以直接loadURL,可以自己指定样式,但是效率低。
二、epub的文件格式:
- epub解压后,封面是一个XHTML,里面嵌有封面cover.jpeg,每一章节是一个HTML,里面包含着链接着相关的CSS样式,具体epub的文件结构可以参考这个:http://www.lai18.com/content/10588059.html,主要用到的就是:解压后提取每一章节,通过ncx ,opf这些文件,提取出来每一章的HTML以及对应的title,页码等,封装成一个chapterModel,一章对应一个chapterModel
四、HTML+css的渲染机制:参考一个简答的实现:http://www.jianshu.com/p/c375ac056149,可见webview在加载的时候,是自动将相关联的css样式渲染到HTML文本里的,关键就是css的解析以及和HTML的合并
五:coretext:
- 可以参考这个http://www.jianshu.com/p/ad4796df3dd6,简单来讲,在OS/OSX中用于描述富文本的类是NSAttributedString,顾名思义,它比NSString多了Attribute的概念,它可以包含很多属性,粗体,斜体,下划线,颜色,背景色等等,每个属性都有对应的字符区域。在OSX上我们只需解析完毕相应的数据,转为NSAttributedString即可,底层的绘制完全可以交给相应的控件完成。
七、DTCoreText:
- github地址:https://github.com/Cocoanetics/DTCoreText,这是一个封装友好的,用原话来讲就是:Methods to allow using HTML code with CoreText,主要功能就是能够将我们输入的HTML文件进行解析,并自动关联相对应的css样式(也帮我们解析好了),我们需要做的就是输入一个HTML文件,他就会给我们输出带有排版样式的NSAttributedString,然后我们直接使用coretext进行画这个NSAttributedString就可以啦!导入库的时候,建议使用cocoapods,并且在buildsettings—>lingking->other link flags,第一个填上$(inherited)
- 关于DTCoreText的使用,我主要参考这篇博文以及工程,http://blog.smartlogic.io/2013/04/02/ios-app-development-dtattributedtextview-instead-of-uiwebview。简单明了的一个demo。
六、清楚了上述所列,因此我们的目标就是讲提取到的每一章节的HTML文件,转化成NSAttributedString,并且这个NSAttributedString不是简单的字符串,而是带有排版样式的string,借助于DTCoreText,就可以完成上述功能的实现了。
DTCoreText的更多相关文章
- 有关DTCoreText无法加载网络图片及应用问题
至于DTCoreText是干嘛的,不清楚的同学自行网上脑补,这就不啰嗦了,只说一下其用法. 里面有三种控件供大家使用,DTAttributedTextView, DTAttributedLabel 和 ...
- iOS富文本组件的实现—DTCoreText源码解析 渲染篇
本文转载至 http://blog.cnbang.net/tech/2729/ 上一篇介绍了DTCoreText怎样把HTML+CSS解析转换成NSAttributeString,本篇接着看看怎样把N ...
- iOS富文本组件的实现—DTCoreText源码解析 数据篇
本文转载 http://blog.cnbang.net/tech/2630/ DTCoreText是个开源的iOS富文本组件,它可以解析HTML与CSS最终用CoreText绘制出来,通常用于在一些需 ...
- OS开发小记:iOS富文本框架DTCoreText在UITableView上的使用
要在页面中显示自己的布局,比如文字的字体和颜色.图文并排的样式,我们要用iOS SDK的原生UI在app本地搭建,如果一个页面需要在服务器端获取数据的话,我们也要在本地搭建好固定的布局,解析服务器传回 ...
- HTML的CoreText流畅度超过WebView。CoreText第三方框架DTCoreText的介绍
为什么要用CoreText(富文本)来取代WebView去显示内容.主要的原因就WebView有很大的问题,性能,FPS,卡顿,与原生不搭.这些都是大问题. WebView的缺点 1.直接使用WebV ...
- DTCoreText 、WKWebView 、UIWebView的比较
DTCoreText .WKWebView .UIWebView的比较 HTML->View 数据解析: WebCore:排版引擎核心,WebCore包含主要以下模块:Loader, Parse ...
- [翻译] DTCoreText 从HTML文档中创建富文本
DTCoreText 从HTML文档中创建富文本 https://github.com/Cocoanetics/DTCoreText 注意哦亲,DTRichTextEditor 这个组件是收费的,不贵 ...
- IOS Html富文本渲染方式:DTCoreText、WKWebView、UIWebView的内存占用对比
在app的内容页(详情页)中,富文本的显示一直是经常需要处理的问题,而通常在后端的富文本编辑中,Html应用比较普遍,所以其实需要处理的Html富文本显示的问题,以下这三种方式肯定不是最优的显示Htm ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
随机推荐
- Node.js学习 - Function
Node.js函数和JavaScript类似 function say(word) { console.log(word); } function execute(someFunction, valu ...
- java文件处理之压缩,分割
http://blog.csdn.net/ycg01/article/details/1366648 java文件处理之压缩,分割 标签: javaexceptionimportnullbytefil ...
- Django: 之数据库导入、迁移和联用
Django 数据库导入 从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库,应该如何操作呢? 以下操作符合 Django版本为 1.6 ,兼顾 Django 1 ...
- Servlet程序开发--Servlet简介
使用java语言开发的服务器端程序,可以生成动态web页,运行在服务器端,由服务器调用执行,是一种按照servlet标准开发的类. 先有servlet,后有jsp,jsp骨子里依然是servlet. ...
- 何查询SQL Server数据库没有主键的表并增加主键
SQL Server数据库中,如果一个表没有主键,我们该如何查询呢?本文我们主要就介绍了如何查询数据库中没有主键的表名并为其增加主键的方法,希望能够对您有所帮助. 该功能的实现代码如下: declar ...
- Repeater嵌套gridview
前台:<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSour ...
- android Spinner 续
android Spinner 续 动态增删Spinner中的数据项 public class EX04_09 extends Activity{ private static final Stri ...
- android studio 学习进阶
1,下载地址 :http://pan.baidu.com/s/1eQxO1MU#path=%252FAndroid-Studio
- PAT (Advanced Level) 1041. Be Unique (20)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- input输入框和 pure框架中的 box-sizing 值问题
在使用pureCSS框架的时候,遇到一个问题. input输入框,我给他们设置了宽度和padding值,我发现,在火狐和谷歌上面发现,增加padding值并不会影响最终的宽度,而在IE6 7下则会影响 ...