【问题标题】:Alternative for sizeWithFont: methodsizeWithFont 的替代方法:方法
【发布时间】:2010-03-03 13:05:10
【问题描述】:

我有一个类,它的工作是将文本解析成几页。 我使用 sizeWithFont: 方法来确定一页何时结束而另一页何时开始。 但不幸的是,由于需要解析的文本量很大,整个操作需要在后台线程上执行(需要几秒钟才能完成)。因此,有时我会在我的界面上看到视觉伪影(UIKit 不是线程安全的,但我同时从多个线程调用它),我很想摆脱它。

我需要摆脱在后台线程上使用 sizeWithFont:。但是这种方法似乎没有替代方法。使用 Core Graphics 找出文本宽度的唯一方法是使用苹果文档中所述的方法:

  1. 调用函数CGContextGetTextPosition获取当前文本位置。
  2. 使用函数 CGContextSetTextDrawingMode 将文本绘制模式设置为 kCGTextInvisible。
  3. 通过调用函数CGContextShowText在当前文本位置绘制文本来绘制文本。
  4. 通过调用函数 CGContextGetTextPosition 确定最终文本位置。
  5. 从结束位置减去开始位置以确定文本的宽度。

但我真的很担心这会导致巨大的性能损失。

有谁知道另一种确定文本宽度的方法吗?

【问题讨论】:

    标签: iphone cocoa-touch uikit core-graphics


    【解决方案1】:

    如果您有可能将您的应用程序定位到 iPhone OS 3.2,您可以查看Core Text

    不过,请注意,整个 Core Text 库也不是完全线程安全的。来自文档:

    多核注意事项:Core Text 中的所有单个函数都是线程安全的。多个操作、工作队列或线程可以同时使用字体对象(CTFont、CTFontDescriptor 和关联对象)。但是,布局对象(CTTypesetter、CTFramesetter、CTRun、CTLine、CTFrame 和相关对象)应在单个操作、工作队列或线程中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2014-03-08
      相关资源
      最近更新 更多