2010-08-23 3 views

Antwort

27
CGFontRef cgFont = CGFontCreateWithFontName((CFStringRef)uiFont.fontName); 
+2

nicht berücksichtigt Größe der Schriftart nimmt. Sie müssen das manuell tun. –

+0

Dies erfordert auch eine Brücke, wenn Sie ARC verwenden. Für mich funktionierte etwa Folgendes: 'CGFontRef cgFont = CGFontCreateWithFontName ((__ bridge CFStringRef) uiFont.fontName);' – sammarks

-1
diesen Delegaten UIColor zu CGColorRef ich bin Umwandlung

Sie stellen eine Frage in das Thema und es scheint eine andere im Körper. Ich werde auf den Betreff antworten.

Sie können einfach nur werfen einen UIFont * zu einem CGFontRef wie folgt aus:

UIFont *font = [UIFont fontWithName:@"Helvetica" size:10.0]; 
CGFontRef cgFont = (CGFontRef) font; 

Ich habe nicht bestätigt, ob dies der offizielle Weg, es zu tun ist, aber es funktioniert für mich.

Update:

Es ist ein wenig seltsam, weil es manchmal funktioniert, aber manchmal ist es nicht. Zum Beispiel, das funktioniert:

CGContextSetFont(context, (CGFontRef) font); 

Aber dies nicht:

CTFontCreateWithGraphicsFont((CGFontRef) font, 10.0, nil, nil); 
+0

Apples Dokumentation für CATextLayer besagt ausdrücklich, dass Sie keine UIFont-Instanz verwenden können, für die ein CGFontRef angefordert wurde. Dies wirft die Frage auf, ob CGFontRef/UIFont tatsächlich gebührenfrei überbrückt werden (ich denke nicht?) – Adam

+0

'CGContextSetFont (Kontext, (CGFontRef) font)' funktioniert auch nicht für mich - es scheitert still, auch wenn ich 'addiere __bridge', um es zu einem "überbrückten Cast" zu machen – AlexChaffee

0

In Swift 4 CGFontRef zu CGFont umbenannt wurde. Umwandlung ist ziemlich einfach

let font: CGFont? = CGFont(uiFont.fontName as CFString)

Verwandte Themen