• Stars
    star
    1,201
  • Rank 38,995 (Top 0.8 %)
  • Language
    Swift
  • License
    MIT License
  • Created about 8 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

支持项目使用!最完整小说阅读器Demo!仿iReader(掌阅),QQ阅读 ... 常用阅读器阅读页面,支持 翻页效果(仿真,覆盖,平移,滚动,无效果)、字体切换、书签功能、阅读记录、亮度调整、背景颜色切换 ...

DZMeBookRead

Version Swift Version Xcode Version Author


技术QQ群: 52181885,麻烦进群之后@群主进微信群(大前端交流群)


一、DEMO 效果(导入项目流程看 第四步

DEMO效果


二、简介与版本记录

提示: 

下载不同版本可在上面的 Branch 选项中选择下载版本, master 分支为最新版本。

v1.3 (Swift4.2) {

    2021-12-28 更新: 支持 DZMCoreText 获取指定页(内容)获取所有断尾 NSRange 或者 CGRect,方便做断尾评论功能。

    2021-11-16 更新: 修复长按选中一个段落,页头页尾无限循环问题,解决 ipad iOS15 放大镜崩溃问题。
    
    2021-11-1 更新: 支持长按选中一个段落内容,或者选中一行内容。

    2021-4-9 更新: 解决放大镜在 iOS 13 之后系统中长按不显示问题,iOS13 以后苹果增加了 SceneDelegate 来管理窗口,必须将自定义 Window 注册到 SceneDelegate 中。
    
    2021-4-9 更新: 优化长按弹出操作菜单代码,解决隐藏操作菜单闪动问题,更新为 Xcode 12.4
    
    2021-4-8 更新: 页尾留白问题解决,新问题:英文阅读单纯被分割,但是按单词分割,页尾则会留白,参考 DZMReadConfigure.swift 文件 242 行。
    
    2020-11-25 更新: 感谢 @dreeye 小伙伴的帮助!!修复滚动模式滚动内容崩溃问题,之前是由于存放章节字典有线程安全问题导致章节对象中途释放出现野指针崩溃,现在已经修复,滚动模式可以正常使用了。 

    2020-11-25 更新:滚动模式崩溃问题:“现在有个BUG在iOS12.2以后, iOS12.2以前到没出现,我这边测试机用的X才会系列会出现,其他机型好像也不会,滚动模式 DZMReadViewScrollController -> chapterModels 字段里面章节model会提前释放,不会被强引用,很是郁闷, 低版本没有问题。拿到Demo的可以测试一下滚动模式下会不会有问题。其实就是章节Model提前释放了,但是我存放的是字典对象,理论上是强引用对象的,现在12.2却出现这样的问题”

    2020-6-15 更新: 加入【平移翻页模式】
}

v1.2 (Swift4.2) { (同上版本)

    2019-5-20 BUG: 滚动模式在iOS12版本以上会出现闪退,原因是字典里面的章节内容对象提前释放了,iOS12以下却没有问题,暂时没有更好的存储方式所以先替换为之前版本存储方式。
    
    2019-5-17 修复: 书籍首页添加标签BUG, 第一次进入创建阅读页多次BUG。

    2019-5-16 更新: 加入TXT全本快速进入阅读。

    2020-3-17 由于系统 UIPageViewController 的点击左右翻页范围太小,且不可自由控制,增加自定义手势开关支持随意控制仿真模式左右翻页菜单的点击区域控制。
}

v1.1 (Swift4.2) { (TXT,有书籍首页)

    2019-5-16 更新: 解析文本,代码细节优化。
    
    2019-5-10 修复: 无效果快速点击BUG。
    
    2019-5-7 更新: 加入书籍首页支持。
}

v1.0 (Swift4.2) { (TXT,无书籍首页)

    2019-4-29 更新: 重做Demo, 升级Swift4.2, 解决遗留问题, 优化代码使用。
}

三、导入项目流程

文件介绍1


四、epub 支持提示

DTCoreText同样也可以解析txt,epub...分页相关的功能,很方便。不需要像我这个Demo中一样复杂的解析处理。当然有喜欢研究CoreText可以参考下我的Demo。

DTCoreText对于epub来说,主要功能就是能够将我们输入的HTML文件进行解析,并自动关联相对应的css样式(也帮我们解析好了),我们需要做的就是输入一个HTML文件,

他就会给我们输出带有排版样式的NSAttributedString,然后我们直接使用CoreText进行画这个NSAttributedString就可以啦!

Github地址:https://github.com/Cocoanetics/DTCoreText

五、项目思路理解:

1. 将一个完整的TXT或者文本解析成一章一章的章节模型,通过归档的模式进行缓存起来(归档解析速度比数据库要快)。

归档缓存方式:

    通过 bookID 和 chapterID 作为文件夹以及文件名进行缓存,

    这样做的话那么只需要面对 bookID 和 chapterID 就可以知道本地是否有这个章节存在以及获取阅读,
    
    同时在网络小说的情况下,你需要通过 bookID 和 chapterID 就在任何位置,或者后台进行缓存下载章节,并同时进行流畅阅读,
    
    只需要在阅读或者下载的时候判断下本地是否存在该章节归档文件就可以避免重复下载。
    
2. 创建一个 readModel, readModel 里面存放的是这本小说的公用属性, 比如阅读记录, 书签, 等等...

   在阅读过程中就是起到一个针对这本小说需要公用属性以及记录属性的作用
   
   那么怎么使用它进入阅读呢? 你只需要通过一个 bookID 获得一个 readModel 对象, 然后使用它里面修改阅读记录的方法, 
   
   将你需要阅读的章节的 chapterID 传进去修改为当前这个 readModel 的阅读记录对象即可, 你修改阅读记录的章节必须存在,
   
   也就是说你是网络小说就要先将要阅读的章节下载到本地归档好, 本地小说就先解析一章到本地归档好, 在使用 readModel 进行修改阅读记录,
   
   然后传给控制器就可以进行阅读了。
   
3. readModel里面的 chapterListModels 是可有可无的, 阅读过程中不依赖章节列表, 也就是说你可以先设置章节列表, 也可以删除不使用,

   也可以在 DZMRMLeftView 里面去单独请求这个章节列表的数据, 它的作用只是用于手动选章节的使用得到一个 chapterID 进行加载并缓存阅读而已,
   
   一般 chapterModel 里面就已经带好了当前章节ID以及上下章章节ID。
   
4. 网络小说使用:
    
   1).进入阅读页的时候获取一个你要阅读的 chapterID, 这个 chapterID 的章节内容需要存在本地归档文件里面, 并通过 readModel 修改为阅读记录对象,就可以传入控制器进行阅读了。
   
   2).然后在上下翻页里面根据 chapterID 判断是否有归档文件, 没有就下周并缓存, 修改为阅读记录进行继续阅读, 如果不知道在哪里修改, 全局搜索 "网络小说操作提示", 可以看注释。
   
   3).边下载边看这个操作就可以看上面 1. 的提示了。
   
   4).章节归档处理的 增删改查 都已经封装, 可以直接使用 在 DZMKeyedArchiver.swift 文件中下面。

六、附带信息

More Repositories

1

DZMCoverAnimation

IOS 小说阅读《覆盖翻页》效果 支持手势操作是否开启动画效果开关 《无效果 跟 有效果 一行BOOL值代码搞定》 支持控制器切换 也支持View切换 注意: 打开工程默认是支持控制器切换的 右键 ShowFinder 进去有针对View切换的 因为文件名一样 只能同时存在一个文件夹
Objective-C
112
star
2

DZMLuckyDraw

HTML 5 网页端年会抽奖源码,只需要导入名单列表即可,可内定中奖人员!
JavaScript
72
star
3

DZMDrawingBoard-WebSvg

支持在视频、图片上面进行编辑的 svg 画板,支持旋转、拖拽、修改、字号、颜色....
JavaScript
36
star
4

OCDZMeBookRead

OC项目集成以及使用DZMeBookRead
Swift
32
star
5

DZMAnimatedTransitioning

常用阅读软件打开书籍转场动画, 已封装支持项目使用。
Objective-C
28
star
6

DZMPhotoBrowser

图片展示器: 支持横竖屏,屏幕旋转,使用简单,注释多可扩展程度高,兼容Swift混编使用
Objective-C
22
star
7

DZMCycleScrollView

支持Views 以及 Controllers 数组进行无限轮播, 使用简单, 一个Bool值决定是否能无限滚动,一个Bool值决定是否使用定时器进行自动轮播,还有更多简单调用功能......
Swift
17
star
8

DZMTextView

常用小控件封装
Swift
16
star
9

DZMDynamicAnimatorDemo

利用 贝塞尔曲线,CADisplayLink,UIKit Dynamics 实现Q弹的下拉刷新
Objective-C
10
star
10

DZMCycript

【越狱-逆向】基于 Cycript 实现的一些实用函数,后续会加入更多的扩展函数。
Cycript
9
star
11

DZMeBookRead-Swift3.x

DZMeBookRead Swift3.x 停止更新
Swift
8
star
12

DZMMagnifierView

放大镜, 使用方便简单,支持修改偏移,放大比例
Objective-C
8
star
13

DZMSegmentedControl

新闻频道导航栏
Swift
6
star
14

DZMScrollDemo

多个滚动控件手势判断 可直接拖入项目直接使用 已经封装好
Objective-C
6
star
15

DZMAntdvUpload

基于 antdv 的上传组件 a-upload 、a-upload-dragger 进行二次封装,扩展了重复文件效验,文件大小限制,文件数量限制,视频或图片大小宽高比例限制,检测错误控制,错误自定义以及回调处理,文件检测模式等常用功能
Vue
4
star
16

DZMAreaPickerViewDemo

省市区封装 有省市区ID 可通过省市区ID 获取名称 选中 等操作 可支持同样格式的文本更新
Objective-C
3
star
17

DZMUniAppBaseProject

自用 UniApp 框架
JavaScript
3
star
18

DZMDrawingBoard

微信小程序 Canvas 封装,支持画图,签名,生成图片......
JavaScript
3
star
19

DZMOperation

可手动控制的NSOperation,通过Block回调告诉Queue该Operation完成操作
Objective-C
3
star
20

cggit

一个将 Git 提交、合并命令简化的小工具,一行命令搞定提交、合并、分支偏移,基于 Node 编写的一个自动化命令工具!
JavaScript
3
star
21

DZMProgressView-Swift

swift 版本 进度条 自带 KVO 监听各个属性变化 -> 字体 颜色 背景颜色 圆圈颜色 等
Swift
2
star
22

DZMTimer

倒计时,定时器,NSTimer封装,简单使用!
Objective-C
2
star
23

DZMVueBaseProject

自用 Vue Base 空项目框架,附带常用的项目使用环境
Shell
2
star
24

DZMAdaptive

帮助自适应计算frame布局 富文本也可以计算 需要自己修改为富文本字符串
Swift
2
star
25

DZMWx-cli

基于 miniprogram-ci 封装的微信小程序自动化发包脚本,常用于各种情况的批量自动发包!
JavaScript
2
star
26

vscode-auto.js-autox.js-snippets

vscode 编写 auto.js、autox.js 时没有对于的语法提示进行代码补全,因为 auto.js pro 的插件已经从 vscode extension 中删除了,所以需要使用这种方式代替。(vscode-auto.js-autox.js-ext-snippets)
2
star
27

DZMTOPTabBarController

控制器无限滚动,使用简单, 一个Bool值决定是否能无限滚动,一个Bool值决定是否使用定时器进行自动轮播,还有更多简单调用功能......
Swift
2
star
28

DZMNavigationTransitionAnimation

仿今日头条 腾讯新闻...转场动画。抽屉式转场。
Objective-C
1
star
29

DZMeBookRead-Swift4.0

DZMeBookRead-Swift4.0 停止更新
Swift
1
star
30

DZMFormJson

csv、xls、xlsx、文件通过 JavaScript 解析成为 JSON 数据,支持行列合并问题,CSV文件逗号分隔问题。
JavaScript
1
star
31

DZMUsbConnect

【越狱-逆向】将USB连接越狱手机封装成可以 .sh 脚本,方便端口映射以及通过USB连接越狱手机。
Python
1
star
32

MBProgressHUD-DZM

MBProgressHUD 扩展, 简单快捷使用!
Objective-C
1
star
33

DZMFullPage

简单明了的分页效果,可用于做Web网页分段页面动态添加展示动画
JavaScript
1
star
34

DZMGroups

滚动嵌套列表展示使用
Objective-C
1
star
35

auto.js

收藏: auto.js v4.1.1 apk 及 code,v7.0.4.1 apk 破解版,v9.1.20-0 apk 破解版,只用于学习交流。
1
star
36

DZMExcelDownload

将指定数据导出为 Excel 文件,方便简单
JavaScript
1
star
37

AES

项目内含: iOS_AES_128, Android_AES_128 两平台加密源代码, 基于AES的ECB模式,选用了zeropadding填充,数据位为128位
Objective-C
1
star
38

DZMH5Dowload

Vue 下载任何URL文件 Demo
JavaScript
1
star
39

iterm2-zmodem

使用 Homebrew 为 iTerm2 安装 Z-Modem 集成,附带:CentOS 安装 lrzsz 上传(rz)和下载(sz)文件(Mac 与 Windows)教程
Shell
1
star
40

auto.js_4.1.1_apk_and_code

auto.js 4.1.1 原版代码仓库克隆收藏研究,包含 apk (debug、release) 与 源码。
1
star