それを見たときは驚きました
CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attributedString);
属性付きの文字列に絵文字が含まれていると、アプリケーションが応答しなくなりました。
バグレポートを提出しました。その間、クイックフィックスとして何ができますか?
それを見たときは驚きました
CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attributedString);
属性付きの文字列に絵文字が含まれていると、アプリケーションが応答しなくなりました。
バグレポートを提出しました。その間、クイックフィックスとして何ができますか?
キャッシュを「甘く」する必要がある場合があります。CGFontRefを使用していると仮定して、同じ絵文字をレンダリングするように取得します。多くの場合、Appleはコストのかかる何かをする前に最後の最後まで待ちます。必要になることがわかっている場合、おそらくスレッドで早い段階で作業を強制すると、後でそれらの文字が必要になったときに、どこかにレンダリングされてキャッシュされます。
私のアプリでは、applicationDidLaunchで、このようなことを行うブロックを生成します。
編集:applicationDidLaunchで、後で絵文字をレンダリングするために使用するフォントのCTFontRefを取得します。たくさんの絵文字の属性付き文字列を作成し、フォントをCTFontRefに設定します。使用する:
CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)theAttributedString);
それを(うまくいけば)フォントキャッシュを甘くするために。これを最初に行うときは、前に見たように、多少の遅延が発生する可能性があります。それは大丈夫です-遅延が表示されている場所から遅延を削除したいだけです。実際にこれが機能する場合は、上記のコードをディスパッチブロックに入れて、applicationDidLaunchからデフォルトのキューに送信できます。
問題が絵文字を表示しているために最初のビューの描画が遅いことである場合は、運が悪いです。遅延が後である場合は、このような手法が機能します。私も同様の問題を抱えていました。