drawRect
固定幅で2本のテキスト線が描かれたカスタムメソッドのビューがあります。このビューは、テキストの位置とテキストの内容が常に変化する状態で、毎秒約16タイマーの速度で絶えず再描画されています。また、どの背景でもはっきりと見えるようにテキストを描画する必要があります。そのために、次のことを行います。
CGContextSetTextDrawingMode(ctx, kCGTextStroke); // Border mode
[string drawAtPoint:point withFont:font];
CGContextSetTextDrawingMode(ctx, kCGTextFill); // Text mode
[string drawAtPoint:point withFont:font];
このコードは、固定線幅の境界線モードでテキストを描画してから、同じ位置で塗りつぶしモードでテキストを再度描画します。このようにして、各文字の周りに白い境界線が付いた青いテキストが表示されます。
結果は、パフォーマンスを除いて私にとって絶対に満足のいくものです。Time Profilerを使用すると、ビュー全体の描画に費やされる時間の約70%が、境界線(ストローク)モードでのテキストの描画の実行に費やされることに気付きました。ただし、塗りつぶしモードでの描画には、ビュー全体の描画時間の3%しかかかりません。ビューの再描画の頻度を考えると、これは効率的ではないと思います。
では、各文字を境界線で囲んだテキストをより効率的に描画する方法を知っている人はいますか?