1

多くの CATextLayers 文字列を変更する必要があるアプリに取り組んでいますが、そのうちの 1 文字または 2 文字のみです (通常、文字列の長さは約 2 ~ 5 文字です)。

最初は非常に遅いUILabelsを使用していました。そのため、CATextLayerを試しました。これははるかに高速でしたが、十分ではありませんでした。約150のCATextLayersを頻繁に更新しています。カット、ラグを感じます。

次に、CoreText を使用してさらに低レベルで実行しようとしました。CATextLayer とほぼ同じパフォーマンスの CTLine を使用して描画しようとしたため、CoreText の配置コードが完全ではなかったため、CATextLayers に戻りました。

文字列ごとに最初の 2 文字 (常に一定) をキャッシュし、残りの 3 文字のみを小さい境界で変更することを考え始めました。結局のところ、それを他のテキストレイヤーと合成する必要があり、150のテキストレイヤーすべてを更新する必要があります。

誰かアドバイスはありますか?どのようにアプローチしますか?

添付のスクリーンショットは、問題が CATextLayer のパフォーマンスにあることを示しています。楽器の時間プロファイル

4

1 に答える 1

1

ビットマップ フォントはおそらく、この問題を解決するための最良の方法です。ビットマップ フォントは、この性質のフォント描画に関して他の何よりもはるかに優れているためです。ただし、視覚的にもパフォーマンスの面でも最大限に活用するには、必要なスケールに事前にレンダリングする必要があります。

また、スプライト キットにはネイティブな処理があるため、スプライト キットを使用することをお勧めします。これは、レンダリングされたビットマップを作成するための一般的なツールから簡単に使用できる便利なものを備えた github リポジトリです: https://github.com/tapouillo/BMGlyphLabel

于 2014-04-16T05:05:33.703 に答える