dengzemiao / DZMeBookRead

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

有几个疑问和建议不知道可以说说不 #21

Closed buzai closed 6 years ago

buzai commented 6 years ago

解析的txt文本是有换行和缩进的对吧。然后你通过计算字体大小和屏幕大小计算出每页需要显示的文字,然后根据需要的格式将文字渲染到了屏幕上,所以第一次会很慢对吧。那之后翻页的时候之前解析的章节从内存中remove掉了么?如果还在内存里为什么滑动的时候会慢呢。 不过如果是网络小说的话是否就会不会卡顿了,因为都是从网络下载好的章节,只需计算每页显示的内容就好了。而且数据量会小一些,就算是缓存了的也是结构好了的数据比较容易计算

dengzemiao commented 6 years ago

@buzai 进入慢问题解释: 第一次慢是因为数据太大 我项目简介下面有快速进入的代码编写建议,不是因为渲染以及计算,这个相对整体数据跟速度来说是可以排除,如果你只计算一页就直接进入阅读页面是不是就可以秒进了(就算第一次也一样)。

dengzemiao commented 6 years ago

@buzai 内存问题: 只要看不见的章节我都会直接从内存里面移除 但是还在沙河文件里面,只有到需要阅读这一章的时候才会拿出来进行使用,一但这一章消失我则会把它从内存移除。

buzai commented 6 years ago

@dengzemiao 谢谢哈讲的很明白

dengzemiao commented 6 years ago

@buzai 滚动模式会卡的问题:它之所以卡 是因为我做的是一个父Tableview 然后在它的Cell里面在放置了一个Tableview,就相当于父控件的每一个Cell 都是一个章节,然后每一个章节都会一次性渲染出来,一章有多少页都会在滚动模式下一次性渲染出来,其中还包括了重新计算多少页(这个我已判断只要跟上次的字体属性不一样就会进行重新分页,没变动是会跳过重新计算的),一章可能有好多页一起渲染以及一些计算操作会出现一些卡顿。主要还是在渲染上面 我试过注释了渲染则不会卡顿。

dengzemiao commented 6 years ago

@buzai 这个滚动模式你有更好的建议咋们可以讨论下 呵呵! 暂时这样的话虽然在章节与章节的交接处会有一点卡顿之外,暂时并无别的问题。只少在功能上还能用。我也希望能解决这个卡顿问题,就是还没更好的点子,工作也忙,没有时间去想这方面的东西

buzai commented 6 years ago

@dengzemiao 那是否可以在本章的时候渲染下一章节直接,这样切换的时候就无需计算了,然后我看过的几个源码有的实现方式是直接用一个lableView作为显示,然后维护了一个数组来实现的显示文字。

dengzemiao commented 6 years ago

@buzai 可以预加载 但是迅速滚动的时候还是一样会出现卡顿

dengzemiao commented 6 years ago

@buzai 需要一个更好点的处理方法

buzai commented 6 years ago

@dengzemiao 我试过注释了渲染则不会卡顿?你的意思是不在cell上面渲染文字只进行计算就不会卡顿了对吧

dengzemiao commented 6 years ago

对的 主要还是一次性渲染多页 其实可以一个Tableview 进行分组实现章节 但是就是切换字体大小之后刷新字体不好刷新Tableview组,往下刷新没事,就是网上滚动会出问题

dengzemiao commented 6 years ago

@buzai 一个Tableview 每一组就是一个章节 这样其实就可以避免卡顿问题 我试过 但是就是切换字体大小之后 网上滚动 进入上一个章节的交接处时 可能页数会变动,这个时候不好刷新上一组 我想过很多办法去刷新 但是没想到办法解决 所以才换成这种

dengzemiao commented 6 years ago

@buzai 上下滚动模式卡顿问题已解决 最新版本已上传

buzai commented 6 years ago

@dengzemiao cool!