如何将 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