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 ...
随机推荐
- 【转】bootstrap 的 affix.js 插件
我觉得 Twitter Bootstrap 提供的 JavaScript 插件可用性非常高,但文档多数简单.按部就班操作了,有效果当然好,没效果的话简直不知道为什么.之前我写过 Scrollspy 用 ...
- 51nod 修改数组
修改数组 给出一个整数数组A,你可以将任何一个数修改为任意一个正整数,最终使得整个数组是严格递增的且均为正整数.问最少需要修改几个数? Input 第1行:一个数N表示序列的长度(1 <= N ...
- CentOS查询 杀死进程
ps aux | grep XXX 查询进程 ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程序. ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参 ...
- ExtJS的4.1新特性简要介绍
ExtJS的4.1新特性简要介绍 一.动态加载机制 Ext.require动态加载任何类,并且会加载依赖类: 二.新类系统 •类定义:ExtJS4.0以后应入了Ext.define方法,他通过类的字符 ...
- Java笔记(三)
12. 字符串 String s1 = "abc"; String s2 = new String("abc"); s1在内存中有一个对象:s2在内存中有两个对 ...
- PHP聊天室开源系统workerman-chat
PHP聊天室开源系统workerman-chat (2015-01-23 09:07:50) 转载▼ http://www.workerman.net/ http://www.workerman.ne ...
- Hadoop的初步理解
一.整体思维导图 二.HDFS(Hadoop分布式文件系统) 说明 NameNode:保存整个文件系统的目录信息.文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode ...
- Firebug Console 与命令行全集
Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人员调 ...
- oracle监听无法启动
昨天再监听里新加了个地址,重启电脑后监听无法启动,删除新加地址就好了 # listener.ora Network Configuration File: d:\oracle\product\10.2 ...
- 使用bootstrap响应式布局——手机屏幕中横向滚动显示标签页选项
导航栏到小屏幕的时候,我们的处理办法是隐藏为一个按钮.可是选项卡的标签页部分,我们的处理办法是加一个水平滚动条.但是加水平滚动条需要解决一个问题,就是宽度的问题,如果不设置宽度,他就会根据屏幕大小自适 ...