表情符号和CTFramesetterCreateWithAttributedString错误

时间:2012-09-02 19:24:25

标签: objective-c core-text

当我看到

时,我感到很惊讶
CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attributedString);

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

我提交了一份错误报告。同时作为quickfix我能做什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)theAttributedString);

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

如果问题是您的初始视图绘制缓慢,因为它显示表情符号字符,那么,你运气不好。如果延迟稍后,这样的技术可以工作。我有类似的问题。