ITPub博客

首页 > 应用开发 > IT综合 > 读书软件源码,实现书籍阅读的其他功能

读书软件源码,实现书籍阅读的其他功能

IT综合 作者:云豹科技晓彤 时间:2021-12-03 16:08:57 0 删除 编辑

基本原理

NSLayoutManager 会根据加入的 NSTextContainer 不断分走文字, 直到分完为止, 这时候读书软件源码可以使用 layoutManager.glyphRange(for: textContainer) 获取 NSTextContainer 对应的文字范围 range, 之后就可以根据这个 range 进行文字分割

修改字色, 字体

改变字色

读书软件源码改变颜色不需要重新尽心分页操作, 直接操作 UITextViewattributedText 和原始 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, 后者会导致其他信息被清空

改变字体

UITextViewattributedText 和原始 NSAttributedStringfont 设置为新字体, 再重新进行分页操作, 重新设置单页显示视图即可

注意事项与其他

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博客,如有侵权请联系作者删除

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70002045/viewspace-2845680/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
音视频软件开发相关知识科普账号

注册时间:2021-06-11

  • 博文量
    163
  • 访问量
    36465