gpt4 book ai didi

objective-c - 在 iOS 中高效绘制边框文本

转载 作者:行者123 更新时间:2023-12-03 16:55:05 27 4
gpt4 key购买 nike

我有一个带有自定义drawRect方法的 View ,该方法有两条以固定宽度绘制的文本行。该 View 以每秒约 16 个计时器的速度不断重绘,文本位置和文本内容始终在变化。我还需要以在任何背景下都清晰可见的方式绘制文本,为此我执行以下操作:

CGContextSetTextDrawingMode(ctx, kCGTextStroke);        // Border mode
[string drawAtPoint:point withFont:font];
CGContextSetTextDrawingMode(ctx, kCGTextFill); // Text mode
[string drawAtPoint:point withFont:font];

此代码以固定线宽的边框模式绘制文本,然后在相同位置但以填充模式再次绘制文本。通过这种方式,我得到了每个字母周围带有白色边框的蓝色文本。

除了性能之外,结果对我来说绝对满意。使用 Time Profiler,我注意到绘制整个 View 的大约 70% 的时间花在了以边框(描边)模式绘制文本上。但填充模式下的绘制只需要整个 View 绘制时间的3%。我认为考虑到 View 重绘的频率,这效率不高。

那么有人知道如何以更有效的方式在每个字母周围绘制带有边框的文本吗?

最佳答案

两个选项:

  1. 使用阴影而不是绘制轮廓:CGContextSetShadowWithColor
  2. 使用 CGLayer 缓存字符串的图像及其轮廓:CGLayerCreateWithContext

2 的解释:

绘图文本针对字母仅填充一种颜色的标准情况进行了高度优化。各个字形(字母)并非每次都从轮廓中渲染。相反,字形仅在缓冲图像中绘制一次,然后进行缓存和重用。

由于很少绘制轮廓,因此可能没有针对此模式的字形缓存或其他优化。因此,我们的想法是自己进行缓存:将整个字符串绘制到一张图像中,保留该图像并在 drawRect: 方法中绘制它而不是文本。

有几种方法可以做到这一点:

  1. 使用 CGBitmapContext
  2. 使用UIGraphicsBeginImageContext
  3. 使用 CGLayer

关于objective-c - 在 iOS 中高效绘制边框文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11442757/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com