【发布时间】:2016-02-28 20:22:55
【问题描述】:
如果我有一个很长的 NSTextStorage 并且我知道 NSTextContainer 的 CGSize,我如何计算文本的页数? 这件事有标准程序或某种动态计算的方法吗? 我找不到一个很好的教程来使用自定义字体从原始文本制作 iBooks 之类的书(我需要绘制 20-50 页的文本)。
【问题讨论】:
标签: ios swift uipageviewcontroller textkit
如果我有一个很长的 NSTextStorage 并且我知道 NSTextContainer 的 CGSize,我如何计算文本的页数? 这件事有标准程序或某种动态计算的方法吗? 我找不到一个很好的教程来使用自定义字体从原始文本制作 iBooks 之类的书(我需要绘制 20-50 页的文本)。
【问题讨论】:
标签: ios swift uipageviewcontroller textkit
我找到了一种使用 TextKit 的 NSLayoutManager 计算页面数量的好方法。当我创建 NSTextContainers 时只计算页数
var range = NSMakeRange(0, 0)
var containerIndex : UInt = 0
var pageIndex : UInt = 1
while(NSMaxRange(range) < layoutManager.numberOfGlyphs) {
let textViewRect = self.frameForViewAtIndex(containerIndex)
let containerSize = CGSizeMake(textViewRect.size.width, textViewRect.size.height - 16)
let textContainer = NSTextContainer(size: containerSize)
layoutManager.addTextContainer(textContainer)
let textView = UITextView(frame: textViewRect, textContainer: textContainer)
self.addSubview(textView)
range = (layoutManager.glyphRangeForTextContainer(textContainer))
containerIndex++;
if containerIndex%columnCount == 0 { pageIndex++ }
}
columnCount 是使用多列布局时的列数
frameForViewAtIndex 返回滚动视图中当前 textView 的 CGRect
【讨论】: