CGFontGetGlyphWithGlyphName()的麻烦

时间:2018-05-22 16:54:00

标签: macos cocoa core-graphics

我一直在尝试使用CGFontGetGlyphWithGlyphName()方法创建CGGlyph。它适用于所有字母,但不适用于数字。

-(void)drawInContext:(CGContextRef)ctx{
    CGContextSetAllowsAntialiasing(ctx, true);
    CGContextSetFont(ctx, font);
    CGContextSetFontSize(ctx, size);
    CGGlyph glyph = CGFontGetGlyphWithGlyphName(font, CFSTR("L"));
    CGContextShowGlyphsAtPositions(ctx, &glyph, &(textbounds.origin), 1);
}

Windows shows L letter

当我试图绘制数字时,它不起作用:

-(void)drawInContext:(CGContextRef)ctx{
    CGContextSetAllowsAntialiasing(ctx, true);
    CGContextSetFont(ctx, font);
    CGContextSetFontSize(ctx, size);
    CGGlyph glyph = CGFontGetGlyphWithGlyphName(font, CFSTR("3"));
    CGContextShowGlyphsAtPositions(ctx, &glyph, &(textbounds.origin), 1);
}

Window shows empty rect

1 个答案:

答案 0 :(得分:1)

“3”的字形可能被命名为three(拼写出来)。这是我的测试:

import Foundation
import CoreGraphics

let font = CGFont("Helvetica" as CFString)!
for g in CGGlyph.min ... CGGlyph.max {
    if let name = font.name(for: g) {
        print("\(g) \(name)")
    }
}

输出:

... many lines omitted ....
17 period
18 slash
19 zero
20 one
21 two
22 three
23 four
24 five
25 six
26 seven
... many more lines omitted ...

使用核心文本CTFontGetGlyphsForCharacters功能可能会更好。请注意,它使用的是CTFontRef,而不是CGFontRef。您可以使用CGFontRefCTFontRef转换为CTFontCreateWithGraphicsFont