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

基本原理

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值