因项目需求接触的 EPub 阅读器,前前后后尝试了很多库,最后找到了个相对兼容不错的展开了调试;
其中对解压缩和数据加载方面进行了改造优化,使其更加的完美;

其大概原理是首先将 epub 文件解压后得到其资源文件包,其中会包含相应的文件夹,通过 OEBPS 文件夹中的资源文件提取所需的数据并进行拼装后渲染;
其中包含了文件的解压缩和通过 touchXML 对 xml 数据的解析和写入;
对 xml 解析获取到节点内容并保存,遍历数据数组找到其中所需的节点,将其遍历节点得到所需属性的 name 和 value 作为字典对象填充至模型.

/**解析 OPF 文件,从 ncx 读取书籍目录@param opfRelativePath 文件相对路径@param bookInfoModel 数据填充模型@return 结果集*/
+ (NSArray *)parseOPF:(NSString *)opfRelativePath bookInfoModel:(LPPBookInfoModel *)bookInfoModel {...}

具体内容还是直接通过 Demo 中的 code 表述更加直观,Demo 中也包含了一些注释看着相对较为轻松;

效果样式图

                                         

                               

关于 SDK 集成

1)首先,引入'SSZipArchive',通过该解压进行对 EPub 文件的解压,获取其文件资源;
2)其次,引入'MWPhotoBrowser'库,此处需要注意因'MWPhotoBrowser'库已经将'SDWebImage'和'MBProgressHUD'两个库包含其中.若项目中已经引入上面两个库可以直接通过'MWPhotoBrowser'来代替,避免导致文件冲突的异常;
3)最后,引入'DTCoreText',将 html 字符串转化为富文本使用的工具,保证原生实现的同时起到灵活修改样式的功能,且在性能方面相比 WebView 加载方式更具优势.

platform :ios, '8.0'
target "TestEpub" dopod 'SSZipArchive'
pod 'DTCoreText'
pod 'MWPhotoBrowser', '~> 2.1.2'end

关于项目集成后配置

1)将头文件引入至 pch 文件中

#import "XDSReaderHeader.h"

pch 文件创建请见此篇文章

2)编译会抛出 arc 的文件异常,勿慌,此异常由于类文件包中的文件所引起

按照下图所示步骤,在所对应的类中添加"-fno-objc-arc"即可搞定

3)arc 异常处理完毕后再次编译程序会再次提示文件缺失的异常信息

工程文件层级目录中对文件进行检索"mdjyml"后将其文件删除,再次编译工程即可搞定

关于方法调用

配置好文件路径后调用如下方法即可

    // 张学良传     TestEpubNSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"张学良传"withExtension:@"epub"];dispatch_async(dispatch_get_global_queue(0, 0), ^{XDSBookModel *bookModel = [XDSBookModel getLocalModelWithURL:fileURL];dispatch_async(dispatch_get_main_queue(), ^{XDSReadPageViewController *pageView = [[XDSReadPageViewController alloc] init];[[XDSReadManager sharedManager] setResourceURL:fileURL];//文件位置[[XDSReadManager sharedManager] setBookModel:bookModel];[[XDSReadManager sharedManager] setRmDelegate:pageView];[self presentViewController:pageView animated:YES completion:nil];});});

文件夹方式读取加载方式

    /** 配置文件路径*/NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", @"xx文件名称xx"]];// 文件检索NSFileManager *fileManager = [NSFileManager defaultManager];if (![fileManager fileExistsAtPath:filePath]) {[MBProgressHUD showError:@"暂无此书" toView:controller.view];return;}NSURL *fileURL = [NSURL fileURLWithPath:filePath];// Reading bookdispatch_async(dispatch_get_global_queue(0, 0), ^{XDSBookModel *bookModel = [XDSBookModel getLocalModelWithURL:fileURL];dispatch_async(dispatch_get_main_queue(), ^{XDSReadPageViewController *pageView = [[XDSReadPageViewController alloc] init];[[XDSReadManager sharedManager] setResourceURL:fileURL];[[XDSReadManager sharedManager] setBookModel:bookModel];[[XDSReadManager sharedManager] setRmDelegate:pageView];[controller presentViewController:pageView animated:YES completion:nil];});});

Demo 已上传至 GitHub,直接引入所需的 epub 文件(Demo 中含示例文件)后编译即可查阅效果;

https://github.com/survivorsfyh/YHEpubDemo

_______

以上便是此次 Epub 阅读器的小结,首次搞还望多多指教.

Epub 阅读器 - iOS相关推荐

  1. iOS平台epub阅读器推荐

    iOS平台epub阅读器推荐 大家好,眼看着假期就要过去了,不知道大家准备好上班/上学了没有?这段时间有没有好好读书呢.上次小编推荐了几款Android平台上可以使用的epub阅读器.今天就来给大家推 ...

  2. iOS上最好用的3款epub阅读器(转载)

    iOS上最好用的3款epub阅读器 在网络发展迅猛的当下,你是喜欢用手机看电子书还是喜欢捧一本纸质书呢?或是用专门的电子书阅读器阅读呢? 论方便来说我还是更偏向于用手机看电子书,毕竟现在大家都是出门必 ...

  3. 什么是epub格式,IOS上有什么好用的epub阅读器

    有关于EPUB,大家可能都有所耳闻,但却不知道它到底是一种什么格式?又应用于哪些方面?有哪些支持软件?今天我就来给大家解释一下: 关于EPUB,维基百科上是这么解释的:EPUB(Electronic ...

  4. iOS苹果手机上最好用的3款epub阅读器

    epub是一种使用广泛的电子书格式,今天小编将为大家推荐iOS苹果手机上最好的3个epub阅读器. Top1:neat reader 这款在小编用过的阅读器中绝对排第一位,软件界面颜值很高,对追求界面 ...

  5. 最好的3个iOS苹果手机上的epub阅读器

    epub是一种使用广泛的电子书格式,今天小编将为大家推荐iOS苹果手机上最好的3个epub阅读器. Top1:neat reader 这款在小编用过的阅读器中绝对排第一位,软件界面颜值很高,对追求界面 ...

  6. 评测三款最流行的epub阅读器(ios手机适用)

    IOS上有哪些好用的阅读器?小编找了三款网络上呼声最高的进行试用,分别是 ,发现各有特点.一起来看看吧. 1 neat reader Neat Reader是一款比较轻量级的阅读器,可以跨平台使用的E ...

  7. 3款支持ios系统的epub阅读器推荐

    3款支持ios系统的epub阅读器推荐 在小伙伴看电子书的漫漫长路上,一定会碰到epub格式的电子书.刚接触的小伙伴可能对于这个格式比较陌生,但是这种格式相比较而言是很好用的一种格式.它对于复杂一些的 ...

  8. EPUB和PDF的区别,有什么好用的IOS手机epub阅读器

    EPUB和PDF的文件我们在阅读中经常遇到,那它们之间有什么区别呢?今天笔者就来给大家科普一下它们的区别,顺便再给大家安利一些适合阅读EPUB和PDF的IOS手机阅读器. EPUB: EPUB由国际数 ...

  9. EPUB、CAJ 、PDF 格式的区别,有什么好用的IOS手机epub阅读器

    无论是寻找资料,还是寻找图书资源,又或是查找期刊论文,总是免不了和各种各样的网络文件打交道.那么不同格式的软件之间区别的在何处呢?今天我就为大家介绍一下EPUB.MOBI.CAJ 三种格式之间的区别, ...

最新文章

  1. Android_Servlet验证的简单登录程序
  2. 笔记-高项案例题-2016年下-项目收尾
  3. java调用sap接口_(二)通过JAVA调用SAP接口 (增加一二级参数)
  4. 更方便的函数回调——Lambda
  5. Python合并两个有序列表
  6. jsp过滤器示例_Java 8过滤器,地图,收集和流示例
  7. 区块链比特币开源_开源资金:比特币,区块链和免费软件
  8. mysql5.7 glibcxx_3.4.15_Percona Server安装可能出现的问题 version `GLIBCXX_3.4.15' not found ...
  9. java一行输入多个数据类型_Java中的3种输入方式实现解析
  10. 机器学习之问题建模(一)
  11. 017、Linux下超实用的性能监测工具
  12. Xshell 外观配置
  13. 捷顺USB-RS485驱动
  14. cpuv(cpuv2和v3有什么区别)
  15. 典型相关分析 CCA
  16. 金山Andorid面试总结
  17. pro android python with sl4a,Pro Android Python with SL4A
  18. 【广度优先搜索】N叉树的层序遍历 | 腐烂的橘子 | 单词接龙 | 最小基因变化 | 打开转盘锁
  19. doris ODBC 连接 mysql 外部表
  20. 车企围攻整车OS,这张“新王牌”怎么打?

热门文章

  1. 线性表(小白,如有错误还望海涵)
  2. 递归方法实现最大公约数
  3. 移远之Quectel_QuecPython_EC600S 开发板小记(上)
  4. error hawk@0.10.2: The engine “node“ is incompatible with this module. Expected versi
  5. openCV读入图片,openGL实现纹理贴图
  6. Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树
  7. 不平衡分类之逻辑回归,基于python,SMOTE和RFE
  8. 光伏行业十个人的江湖:霸道总裁pk硬汉书生
  9. 笔记本突然无线和有线都不能使用
  10. Siri语音打电话APP