CATextLayer.font
Eigenschaft ist ein opaker CFTypeRef
. Gibt es eine Möglichkeit, diese Referenz in eine umzuwandeln? Es macht mir nichts aus, wenn es ein optionales UIFont zurückgibt.CATextLayer-Schrift in UIFont konvertieren
Antwort
ich nur die folgende Erweiterung geschrieben, die behandeln soll: CTFont
, CGFont
, string name oder UIFont
:
extension CATextLayer {
public var typeFace:UIFont? {
let name:String
switch font {
case let ctFont as CTFont :
// If you assign a UIFont to CATextLayer.font
// it is implicitly converted to CTFont,
// so this case will be called.
guard let _name = CTFontCopyName(ctFont, kCTFontPostScriptNameKey) else {
return nil
}
name = _name as NSString as String
case let cgFont as CGFont :
guard let _name = cgFont.postScriptName else {
return nil
}
name = _name as NSString as String
case let string as NSString :
name = string as String
case let string as String :
name = string
default:
return nil
}
return UIFont(name:name, size:fontSize)
}
}
Nebenbei bemerkt, ich fand diesen Kommentar in der Dokumentation ungenau:
In iOS können Sie dieser Eigenschaft kein UIFont-Objekt zuweisen.
Von meinen Tests konnte ich ein UIFont
auf CATextLayer.font
setzen und es scheint gut zu funktionieren.
EDIT
Es stellt sich heraus, wenn Sie ein UIFont
-CATextLayer.font
Zuweisen zu einem CTFont
hinter den Kulissen umgewandelt wird, so um CTFont
-UIFont
zu konvertieren notwendig es ist, die UIFont
wieder raus (was mein Code tut). Einfaches Senden anwürde nicht funktionieren.
Sie mögen dies tun können,
let font : UIFont = layer.font as! UIFont
hoffe, das hilft
Dies ist OK, nur ein UIFont wird an erster Stelle zugewiesen, in jedem anderen Fall wird es fehlschlagen. Nebenbei bemerkt, würde ich Cast nicht erzwingen, da mein Rückgabetyp "UIFont" ist? Kann es einfach "self.font" zurückgeben? UIFont'. –
- 1. Wie erstelle ich ein fettes UIFont von einem normalen UIFont?
- 2. UIFont fontWithName return null
- 3. Benutzerdefiniertes UIFont für preferredFontForTextStyle
- 4. iOS/UIFont - Reduzierung der Schriftbreite
- 5. UIFont Fehler in Xcode beta 7.3 (7D162j)?
- 6. Gesamtanzahl der Zeichen in einem UIFont
- 7. Äquivalent von UIFont .withSize in NSFont
- 8. UIFont fontWithSize: Ändert den fontName
- 9. UIFont mit einer benutzerdefinierten führenden?
- 10. Swift UIFont Probleme mit Zeichen "ch"
- 11. Speichern von UIFont? to UserDefault Swift 3
- 12. Neue Frage zu UIFont und UIColor
- 13. Skalierung der UIFont-Größe relativ zur Bildschirmgröße
- 14. Wie kann ich UIFont zu CGFontRef konvertieren? Verursacht ich Warnung und nicht funktioniert
- 15. So berechnen Sie die Größe eines UIFont
- 16. Wie ändern Sie die Farbe eines UIFont?
- 17. UIFont - wie System dünne Schrift zu bekommen
- 18. Wiederhole UIFont und UIColor auf Scroll UITableView
- 19. Objective c UIFont SystemFontOfSize funktioniert nicht
- 20. Pfad zum Verfolgen eines Zeichens in einem iOS UIFont
- 21. iPhone iOS UIFont Konvertierung in CTFontRef verursacht Größenversatz
- 22. Wie ein UIFont Objekt CTFont in Swift werfen
- 23. Wie bekomme ich zwei UIFont mit dem gleichen Namen
- 24. Kann nicht die UIFont für Tafel SE fett
- 25. Was ist der Unterschied zwischen NSFont und UIFont
- 26. Ändern nur der Größe eines UIFont auf einem UIButton
- 27. Fehler, wenn sie in einem Text ein UIFont Instanziieren Attribute Wörterbuch
- 28. IIF in CASE konvertieren - Hilfebericht konvertieren
- 29. Xib nimmt lange Zeit (> 1s) zu laden. UIFont-Cache scheint zu beschuldigen
- 30. Konvertieren UILabel Unterklasse von Objective-C zu Swift
Es kann 'entweder ein CTFont, ein CGFont, eine Instanz von NSFont (nur MacOS) oder eine Zeichenkette sein, die die Schriftart gemäß dem Dokument benennt. Also https://stackoverflow.com/questions/6714858/iphone-convert-ctfont-to-uifont, https://stackoverflow.com/questions/9205709/how-to-convert-cgfontref-to-uifont etc.? Abhängig vom Typ sollte der funktionsgleiche Name in Swift verfügbar sein. https://stackoverflow.com/questions/3471964/determining-what-a-cfttypef-is, um den Typ zu bekommen? – Larme
Seit Sie die Textebene erstellt und konfiguriert haben, wie können Sie nicht wissen, welche Schriftart Sie zugewiesen haben? – matt
Einfach. Dies ist Teil eines allgemeinen Frameworks, und ich verwende Textebenen an verschiedenen Stellen mit unterschiedlichen Schriftarten. In der Tat ist meine Antwort unten eine modifizierte Version einer Protokollimplementierung, die ein "get" und ein "set" erfordert. Es werden keine Annahmen gemacht. –