假设我正在使用Core Text为iPhone编写文本查看器。每次用户更改基本字体大小时,我都需要计算需要多少页(固定大小的CGRects)才能显示具有给定字体大小的整个NSAttributedString。

我想在单独的NSOperation中执行此操作,以使用户不会遇到不必要的UI滞后。

不幸的是,要计数页面,我需要使用不可见的文本绘制模式绘制框架(CTFrameDraw),然后使用CTFrameGetVisibleStringRange来计数字符。但是要绘制文本,我需要一个CGContext。问题就从这里开始...

我可以通过调用UIGraphicsGetCurrentContext在drawRect中获得CGContext,但是在这种情况下:

  • 我必须使用performSelectorOnMainThread调用在CGContext上运行的任何方法,对吗?
  • 另一个线程应CFRetain此上下文。在drawRect方法之外使用drawRect的CGContext是否可以接受?

  • 还有其他解决方案吗?在工作线程中创建单独的CGContext?如何? CGBitmapContext?我如何确定所有条件(我不知道,分辨率?等)都将与drawRect的CGContext中的相同,以便正确计数页面?

    最佳答案

    从CTFrameGetVisibleStringRange获取结果之前不需要CTFrameDraw

    09-08 00:08