我想做一个像亚马逊 Kindle 应用程序一样的阅读器。具体来说,我想在段落中呈现一堆对齐的文本,每页一列,并让它像 Kindle 应用程序一样在页面之间滚动。
假设我有一个简单格式的文本,比如每章的文本文件,甚至每章在内存中硬编码的字符串。
他们显然在使用 Core Text。他们是否使用分页滚动视图?这会导致大型书籍的内存问题吗?
我最初的想法是他们使用 UITextView 来显示大量文本,这种视图允许您添加边距、填充、文本,对于 iOS 6,您可以使用 NSParagraphStyle 之类的东西来为文本设置样式,简单方法是在 UIScrollView 内的不同 UITextViews 中创建一个非常长的文本,这会给你一个很好的结果但是如果内存是一个问题并且 iOS 版本不是问题我建议使用 UICollectionViews,你可以让每个页面“单元格”,然后编写一些自定义布局,因此当用户滚动这本书时,您实际上可以实例化用户在某个时刻正在使用的页面
NSCollectionView 很酷的地方在于它的行为与 UITableView 完全一样,因此它非常节省内存,不在屏幕上的内容不会显示,如果要显示则加载。
希望这可以让您对此事有所了解。
我最终做了一些完全定制的东西。它由 3 个视图组成,aleft
main
和right
视图。
视图控制器使用 Core Text 在视图上呈现main
文本,并计算当前章节中每一页的文本框架的大小(以及页数)。
如果用户点击或向右或向左拖动,视图控制器将呈现其中一个侧视图并让您拖动它。当您完成拖动或完成点击操作时,它会将页面动画放置到位,然后将主视图与您拖动的那个交换。
与使用 a 相比,此方法的优势在于UICollectionView
,要以确定的方式计算应在给定页面上显示的确切内容非常昂贵,因为表格/集合视图需要。这种方式让我可以渲染任何章节的文本,并且可以懒洋洋地向后或向前移动,而无需立即布置整本书。