Emoji和CTFramesetterCreateWithAttributedString错误

当我看到这一点时,我感到很惊讶

CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attributedString);

导致我的应用程序在属性字符串包含emojis时无响应。

我提交了一个bugreport。 作为一个quickfix,我能做些什么?


有时你需要“变甜”缓存。 假设您正在使用CGFontRef,请让它呈现相同的表情符号字符。 苹果经常在最后一分钟等待,然后再做一些昂贵的事情。 如果你知道你会需要它,如果你很早就强制工作,也许在一个线程中,那么当你需要这些字符时,它们将被渲染到某个地方并被缓存。

在我的应用程序中,在applicationDidLaunch中,我生成了一个类似这样的块。

编辑:在您的applicationDidLaunch中,获取一个CTFontRef,稍后将使用该字体渲染Emoji字符。 创建一大堆表情符号字符的属性字符串,并将字体设置为您的CTFontRef。 使用:

CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)theAttributedString);

(希望)可以使字体缓存变甜。 当你第一次这样做时,可能会导致一些延迟,如你以前所见。 没关系 - 我们只是想从看到延迟的地方消除延迟。 如果实际上这是有效的,那么你可以把上面的代码放到一个调度块中,并把它从applicationDidLaunch发送到默认队列。

如果问题在于您的初始视图绘制缓慢,因为它显示表情符号字符,那么您运气不佳。 如果延迟时间晚于这种技术可以工作。 我有类似的问题。

链接地址: http://www.djcxy.com/p/81941.html

上一篇: Emoji and CTFramesetterCreateWithAttributedString bug

下一篇: Bug in CTFrameGetLineOrigins?