【问题标题】:How to add CTFrame to UIViewController?如何将 CTFrame 添加到 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 编程新手。

【问题讨论】:

    标签: iphone core-text uipageviewcontroller ibooks ctframe


    【解决方案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 不兼容。
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多