【问题标题】:How can I fill a unicode symbol in `drawRect` using Core Graphics?如何使用 Core Graphics 在 `drawRect` 中填充 unicode 符号?
【发布时间】:2014-01-23 07:40:55
【问题描述】:

我知道我想做什么,但我不知道如何实现它。我是 Core Graphics 的新手,我不确定这是否可行。

我有一个这样的 unicode 符号:♖

此符号的白色部分是透明的,我将其绘制成透明矩形,如下所示:

- (void)drawRect:(CGRect)rect
{
    NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    textStyle.alignment = NSTextAlignmentCenter;

    UIFont* myFont = [UIFont fontWithName:@"ArialUnicodeMS" size:80];

    NSDictionary *attrs =
    @{ NSForegroundColorAttributeName : [UIColor blackColor],
       NSFontAttributeName:myFont,
       NSParagraphStyleAttributeName:textStyle
       };


    [[self getStringForValue:_squareValue] drawInRect:rect withAttributes:attrs];

}

我想要的是用白色填充内部透明部分,并使周围的矩形保持透明。

我正在考虑的方法是使用 unicode 符号作为 drawRect 中的掩码将矩形划分为区域。然后不填充从 0,0 开始的区域,而是填充所有其他区域。我可以使用 Core Graphics 将符号转换为遮罩,然后识别和填充特定区域吗?

我现在得到的是:

但我真正想要的是这个:

【问题讨论】:

  • 你研究过掩蔽吗?你在正确的路线上。
  • 我正在阅读 Apples 文档,我想我会在那里找到方法,但 SO 有时会给出一个快速而肮脏的介绍 ;-)
  • 可能有帮助:cocoawithlove.com/2009/09/…

标签: ios core-graphics mask


【解决方案1】:

您也许可以使用 -[NSBezierPath appendBezierPathWithGlyph:inFont],然后将颜色设置为白色并在该路径上调用 -fill。

编辑:由于您在 iOS 上,并且我不知道如何在 iOS 上获取字形的路径,因此我只需将字形绘制到填充 100% 不透明白色的缓冲区,然后从 0,0 开始以纯透明度进行泛洪填充。

另一个编辑:使用下面的 jrturton 代码,您应该能够按照最初的建议在路径上简单地做一个白色填充,然后用黑色描边。

【讨论】:

  • 不过,这只是可可; UIBezierPath 没有这样的方法。
  • 那些咆哮者!
  • 此类别可能有助于获取路径:github.com/jrturton/NSString-Glyphs
  • @jrturton - 这看起来很有用,但是如果你能提供一些关于如何使用它的示例代码,那就太好了。否则我会试着弄清楚,谢谢
  • 测试应用的屏幕截图,以防您不想运行 iOS 模拟器:i.imgur.com/vEzcI2A.png
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 2021-01-31
  • 2011-02-28
  • 2015-05-08
  • 2019-04-25
  • 2018-11-02
相关资源
最近更新 更多