如何将 CTFrame 添加到 UIViewController?

Posted

技术标签:

【中文标题】如何将 CTFrame 添加到 UIViewController?【英文标题】:How to add CTFrame to UIViewController? 【发布时间】:2013-10-08 14:05:20 【问题描述】:

目标是像 iBooks 样式页面一样格式化和显示文本。 为此,我采用UIPageViewController,为所需动画指定过渡并生成UIViewController 集合等。 为了显示文本,我将 UITextView 放入每个集合的 UIViewController 中。

为了自动分割页面的文本,我制作了自己的程序:

[NSString sizeWithFont:...].

感谢这里的信息 - How does the iBooks App format the text on separate pages?

一切正常,但没有我希望的那么好。 NSString 不是很方便,UITextView 显示没有良好格式的文本。分裂也不够好=)

此外,我还尝试与Core Text 拆分。 该方法显示在这里 - How to split long NSString into pages

它甚至可以工作。 Core Text 分割得很好,它还有许多其他好的功能。但!我无法将 Core Text 文本拆分的值与UITextView 一起使用。要显示被核心文本页面拆分,我必须使用Core Text 技术。

问题是:如何创建一个CTFrame 并为UIPageController 的集合中的每个UIViewController 添加/绘制它?

我怀疑这是不可能的。如果是这样,请提出任何想法来实现所需的功能。

请原谅我的问题,我是 ios 编程新手。

【问题讨论】:

【参考方案1】:

我还没有这样做,但在我看来,您可以从 CTFrame 中获取拟合的字符串范围。

CTFrameRef ctFrameRef = // get this from CTFrameSetter
CFRange cfRange = CTFrameGetVisibleStringRange(ctFrameRef);
NSRange range = NSMakeRange(cfRange.location, cfRange.length);

那么range就可以用来分割原来的字符串了。

【讨论】:

如果我理解正确,您建议将生成的 CoreText 范围转换为 NSString 范围? 是的,那么你可以检查 NSString substringWithRange: 的结尾来查看分页符在哪里。 如果它很大怎么办?从最后开始逐字逐句地构造? =) 我会尝试,至少比较一下。谢谢你的主意。但是将自然 CTFrame 添加到 UIViewController 呢?有人知道答案吗? 我试过了... CTFramesetterSuggestFrameSizeWithConstraints 提供的结果确实与 UITextView 不兼容。

以上是关于如何将 CTFrame 添加到 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS Objective C 的嵌套 UICollectionViews 中从 Child UICollectionViewCell 的 UIButton 将值传递给新的 UIViewCon

如何快速将图像旋转到特定的纬度和经度?

如何在 collectionview 中添加 PageviewController

以编程方式添加的约束反向工作

图文混排原理实现及应用

如何从 SKView 转换到 SCNView?