Проблема с CGFontGetGlyphWithGlyphName () - PullRequest
0 голосов
/ 22 мая 2018

Я пытался создать CGGlyph с помощью метода CGFontGetGlyphWithGlyphName ().Это работает для всех букв, но не для цифр.

-(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 показывает букву L

И когда я пытаюсь нарисовать число, оно не работает:

-(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);
}

Окно показывает пустой прямоугольник

1 Ответ

0 голосов
/ 22 мая 2018

Глиф для «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 ...

Возможно, вам лучше использовать функцию Core Text CTFontGetGlyphsForCharacters.Обратите внимание, что он использует CTFontRef, а не CGFontRef.Вы можете преобразовать CGFontRef в CTFontRef, используя CTFontCreateWithGraphicsFont.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...