读书软件源码,实现书籍阅读的其他功能
基本原理
NSLayoutManager
会根据加入的 NSTextContainer
不断分走文字, 直到分完为止, 这时候读书软件源码可以使用 layoutManager.glyphRange(for: textContainer)
获取 NSTextContainer
对应的文字范围 range
, 之后就可以根据这个 range
进行文字分割
修改字色, 字体
改变字色
读书软件源码改变颜色不需要重新尽心分页操作, 直接操作 UITextView
的 attributedText
和原始 NSAttributedString
就行
let attributed = NSMutableAttributedString(attributedString: textView.attributedText!)
attributed.addAttribute(.foregroundColor, value: ChangeColor, range: .init(location: 0, length: attributed.length))
textView.attributedText = NSAttributedString(attributedString: attributed)
注意, 方法为 addAttribute
, 而不是 setAttribute
, 后者会导致其他信息被清空
改变字体
对 UITextView
的 attributedText
和原始 NSAttributedString
的 font
设置为新字体, 再重新进行分页操作, 重新设置单页显示视图即可
注意事项与其他
UITextView
内间距
请通过 textContainerInset
设置间距, 与分页时的参数保持一致, 单独设置 contentInset
不保证显示正确
添加点击区域
直接在根视图添加点击手势, 设置代理后, 根据点击区域判断行为 这样可以避免 UIPageViewController
的翻页手势被遮挡
在 UIPageViewController 中添加 UISlider 等带有活动操作的视图
请自主做好手势冲突的处理, 不然就是一片乱
分页性能
由于分页流程主要在主线程上, 所以被分页的数据最好不要过大, 单章单章分页就刚刚好
分页后文字可能超出显示区域
每个 NSTextContainer
的 frame 值都是被 NSLayoutManager
粗略计算过的, 与你设置 NSTextContainer
的 size 值略有出入, 有时候大些, 有时候小些, 但误差绝度不会超过一个字符的高度. 所以, 苹果建议我们在设置 UITextView
的时候, 给这个 NSTextContainer
预留一定的高度......
还有字体问题, 因为系统有些字体对中文支持不太好, 可能会对文字的大小计算失误, 请尽量使用以下支持中文的字体, 或其他支持中文的自定义字体:
Heiti SC 黑体-简
Heiti TC 黑体-繁
PingFang TC 平方-简
PingFang HK 平方-繁
PingFang SC 平方-繁
快速翻页导致未分页完成就翻到下一章
可以添加分页中标记, 存在标识时, 下一页上一页代理中返回 nil
读书软件源码的具体判断逻辑请根据自身项目调整
为何不直接使用分页循环中的 UITextView
可以尝试一下, 内存的飙升绝对酸爽, 我在模拟器上测试, 翻了几页直接飙到 150+ M, 目前的方案在模拟器上读书软件源码 整体内存占用最高稳定在 50 M 左右, 真机可以稳定在 20 M 左右
当然, 也有可能是我的方式有错误, 各位可以尝试各种方案, 但分页逻辑万变不离其宗
声明:本文由云豹科技转发自Norld博客,如有侵权请联系作者删除
读书软件源码,实现书籍阅读的其他功能相关推荐
- android 带记忆功能的播放器源码,Android实现阅读进度记忆功能
本文实例为大家分享了android控件webview实现保存阅读进度的具体代码,供大家参考,具体内容如下 用户提了一个要求,要求保存他的阅读进度,然后在他下次阅读的时候可以继续阅读,然后动手实现了一下 ...
- android 软件源码
转自 http://www.cppblog.com/life02/archive/2011/11/23/160837.aspx android 软件源码 android PDF 阅读器 http:// ...
- 仿比心一对一直播软件源码开发,消息通知功能的实现
在仿比心一对一直播软件源码中,消息功能起着非常重要的作用,非实时性的社交都可以通过消息功能来实现,在即时消息模块有两个基本功能就是发送消息和接收消息.我们定义如下通信指令来实现这两个功能: Push ...
- 视频交友直播软件源码开发的必备功能讲解
相信通过这两年行业的发展我们不难看出.视频交友直播源码拥有简单直接的变现方式,深受平台和用户的喜爱,越来越多的年轻人也热衷于视频直播. 视频交友直播软件开发,支持用户在视频过程中用文字沟通,可以互相发 ...
- jdk源码分析书籍 pdf_如何阅读源码?
点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 阅读源码是每个优秀开发工程师的必经之路,那么这篇文章就来讲解下为什么要阅读源码以及如何阅读源码. 首 ...
- 论文阅读笔记——基于CNN-GAP可解释性模型的软件源码漏洞检测方法
本论文相关内容 论文下载地址--Engineering Village 论文阅读笔记--基于CNN-GAP可解释性模型的软件源码漏洞检测方法 文章目录 本论文相关内容 前言 基于CNN-GAP可解释性 ...
- 计算机毕业设计Java校园疫情防控管理软件(源码+系统+mysql数据库+Lw文档)
计算机毕业设计Java校园疫情防控管理软件(源码+系统+mysql数据库+Lw文档) 计算机毕业设计Java校园疫情防控管理软件(源码+系统+mysql数据库+Lw文档) 本源码技术栈: 项目架构:B ...
- 顾客信息表mysql_Qt5.5.0使用mysql编撰小软件源码讲解-顾客信息登记表_mysql
Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表 一个个人觉得比较简单小巧的软件. 下面就如何编写如何发布打包来介 ...
- java计算机毕业设计校园疫情防控管理软件源码+数据库+系统+lw文档+部署
java计算机毕业设计校园疫情防控管理软件源码+数据库+系统+lw文档+部署 java计算机毕业设计校园疫情防控管理软件源码+数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
最新文章
- 数据库事务的四个隔离级别浅析
- 计算机基础18春在线作业1,东师-计算机应用基础18春在线作业1-1.docx
- java的沙盒安全模式_Java沙箱机制
- Qt + Python + OpenCV图标替换工具 之 Qt界面设计(四)
- C语言/C++程序员大神打造纯C的电子时钟(加图形库+源码)
- linux软件管理(yum,rpm)
- Java Interview Questions
- 你不可不知的HTML优化技巧
- (22)Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】
- 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第一章课后习题答案
- Xcode 9以下(xip) 官方直接下载地址(离线下载)
- 好用!不用第三方工具就可以检测微信好友是否删除!
- CCNA题库第一部分
- c计算机怎么读音发音英语,CACD是什么意思
- 通达oa2015 php解密,通达OA /interface/auth.php SQL注入
- html圆角半径,CSS3 / 绘制四个角不同半径的圆角边框 - 汇智网
- fabric java sdk解析channel.queryTransactionByID(txId)方法的返回值
- 三点运算符(三点语法)
- python爬取酷狗音乐url_python-从酷狗下载爬取自己想要的音乐-可以直接拿来体验哟...
- FLV 格式:为什么直播首选这个流媒体格式?丨音视频基础
热门文章
- android:添加usb键盘+按键布局和映射的修改
- 2021年全球与中国油位计行业市场规模及发展前景分析
- 一体化低压伺服电机在写真机上的应用
- WDS2期第24课 1 IIC 驱动框架 adapter和drv 最终drv的attach_adapter的i2c_probe中adapter.master_xfer确定设备然后function
- AIGC 的一些应用场景
- MavenFor this reason, future Maven versions might no longer support building such malformed projects
- XZY数据结构基础(1)
- 一个VB小程序,提醒自己上下班打卡和每小时休息
- 温度检测之运算放大器
- 如何看待矿池抽税激励社区开发者?如何看待EOS?——BCH极客大赛江卓尔专访...