我有一个自定义drawRect
方法的视图,它有两条固定宽度的文本行。该视图以每秒约 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%。考虑到视图重绘的频率,我认为这不是有效的。
那么有人知道如何以更有效的方式在每个字母周围绘制带有边框的文本吗?