Użyłem niestandardowej czcionki w mojej poprzedniej aplikacji.
Nazwa pliku brzmiała „ProximaNova-Regular.otf” i aby załadować czcionkę, której właśnie użyłem ...
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
To działało doskonale.
Teraz w tej nowej aplikacji mam trzy pliki czcionek ...
Dude_Willie.otf
Impact
handsean.ttf
Ale nie jestem pewien, jak je załadować.
próbowałem
[UIFont fontWithName:<the file name> size:20];
Ale to po prostu wraca do używania Helvetica.
Jak mogę znaleźć nazwę, której należy użyć?
familyNames
nie zawierało czcionek, których szukałem.fc-scan --format "%{foundry}: %{family}\n" filename.ttf
lubfilename.otf
.Odpowiedzi:
Wykonaj cztery proste kroki, aby dodać i używać nowej czcionki w aplikacji na iOS:
UIAppFonts
tablicy (zwykły tekst dla tego to „Czcionki dostarczone przez aplikację”)//Szybki
for family: String in UIFont.familyNames { print("\(family)") for names: String in UIFont.fontNames(forFamilyName: family) { print("== \(names)") } }
//Cel C
UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]
i powinieneś zacząć działać !źródło
Kliknij prawym przyciskiem myszy TTF -> Uzyskaj informacje
„Pełne imię i nazwisko” jest tym, czego szukasz.
To właśnie zadziałało w przypadku TTF.
Edytować:
Właśnie użyłem czcionki, która miała inną nazwę niż „Full Name” w sekcji Get Info.
Aby skompilować tę odpowiedź, jeśli powyższe szybkie sprawdzenie nie działa, uruchom ten kod w swoim projekcie:
for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } }
I wyszukaj poprawną nazwę czcionki, której chcesz użyć.
Kod Swift 3.0:
for fontFamilyName in UIFont.familyNames{ for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){ print("Family: \(fontFamilyName) Font: \(fontName)") } }
źródło
źródło
Aby używać czcionek w systemie iOS, należy załadować czcionkę w oparciu o PEŁNĄ NAZWĘ czcionki (nazwę PostScript), która czasami (i zwykle jest) inna niż rzeczywista NAZWA PLIKU czcionki .
Istnieje kilka dobrych programowych sposobów uzyskania nazwy czcionki już w tym wątku, ale mam inne podejście, używając wiersza poleceń.
Jeśli korzystasz z Maca lub Linuksa, po prostu uruchom ten skrypt z wiersza poleceń w katalogu, w którym masz własne czcionki ( użyj
fc-scan
narzędzia z fontconfig, które prawdopodobnie jest już zainstalowane, ale jeśli nie, możesz go zainstalować przez homebrew:)brew install fontconfig
:for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
Oto zrzut ekranu powyższego polecenia działającego w moim
~/Library/Fonts
katalogu:Powyższy skrypt przejdzie przez wszystkie pliki
.ttf
i.otf
w bieżącym katalogu, a następnie wydrukuje nazwę PostScript dla każdej czcionki, której możesz użyć do odniesienia się do pliku czcionki w XCode lub w innym miejscu.Jeśli chcesz uzyskać dodatkowe informacje (PostScriptName, nazwa pliku) i trochę kodowania kolorami, możesz uruchomić ten alternatywny skrypt:
for file in "$arg"*.{ttf,otf}; do postscriptname=$(fc-scan --format "%{postscriptname}\n" $file); printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file"; done
Jest to nieco szybsze niż kopiowanie i wklejanie kodu wewnątrz pliku AppDelegate.m, aby wydrukować nazwy za każdym razem, gdy chcesz dodać nowy plik czcionki, co jest popularną metodą, a także jest szybsze niż otwieranie czcionki w FontBooku, aby sprawdź nazwę PostScript.
PRZYDATNA WSKAZÓWKA: Jeśli utworzysz alias powyższego skryptu w swoim terminalu, aby wszystko, co musisz zrobić, to wpisać jedno polecenie, aby uzyskać wszystkie nazwy czcionek PostScript dla wszystkich plików w bieżącym katalogu (moja funkcja nazywa się
fontnames
więc wszystko, co muszę zrobić jest typemfontnames
na terminalu wewnątrz katalogu z czcionkami, a nazwy PostScript zostaną wydrukowane automatycznie, dzięki czemu zaoszczędzisz czas w przepływie pracy i będziesz mieć ten poręczny skrypt gotowy do użycia, gdy go potrzebujesz.Mam nadzieję że to pomoże!
źródło
fc-scan
zainstalowane narzędzie. Co się dzieje, gdy uruchamiaszfc-scan -V
terminal?brew install fontconfig
.Chcesz wiedzieć, jak uzyskać nazwę, idź do tego: -
NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]]; for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) { NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]); NSArray *fontNames = [[NSArray alloc] initWithArray: [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]]; for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) { NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]); } }
mam nadzieję, że ci to pomoże ...
źródło
Jeśli chcesz znaleźć nazwę czcionki dla danego pliku czcionki programowo:
import Foundation func loadFontName(for file: URL) throws -> String { let data = try Data(contentsOf: file) guard let provider = CGDataProvider(data: data as CFData) else { throw Error("Could not create data provider") } guard let font = CGFont(provider) else { throw Error("Could not load font") } guard let name = font.postScriptName else { throw Error("Could not get font name from font file") } return name as String }
W razie
Error
potrzeby zastąp własnymi przedmiotami do rzucania .źródło
Swift 3.0
for familyName in UIFont.familyNames { for fontName in UIFont.fontNames(forFamilyName: familyName ) { print("\(familyName) : \(fontName)") } }
źródło
Rozwiązanie Swift 4.0+
for fontFamilyName in UIFont.familyNames { print("family: \(fontFamilyName)\n") for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) { print("font: \(fontName)") } }
Wyświetli:
źródło
Po dodaniu czcionek do projektu / aplikacji dodaj ten kod (prawdopodobnie tylko w metodzie didFinishLaunchingWithOptions delegata aplikacji), aby wydrukować wszystkie dostępne czcionki dla Twojej aplikacji. Na podstawie tej listy powinieneś być w stanie zidentyfikować czcionkę, której szukasz. Nie zapomnij usunąć niepotrzebnego kodu po.
for (NSString *fontFamilyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) { NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName); } }
źródło
Możesz także użyć otfinfo --info arial.ttf, aby uzyskać nazwę z wiersza poleceń. Nazwa postscriptowa to ta, którą musisz przekazać do konstruktora UIFont.
źródło
Swift 1.2:
for familyName in UIFont.familyNames() { for fontName in UIFont.fontNamesForFamilyName(familyName as! String) { println("\(familyName) : \(fontName)") } }
źródło
Kolejnym „szybkim, praktycznym” hackowaniem, które nie wymaga skanowania wszystkich domyślnych czcionek, które istnieją w emulatorze lub urządzeniu, jest użycie czcionki do czegoś w twoim
storyboard
. Następnie, jeśli edytujesz scenorys za pomocą edytora tekstu (otwórz jakosource code
), możesz zobaczyć czcionki używane z nazwami „wewnętrznymi”, jeśli szukasz tagu „customFonts”:<customFonts key="customFonts"> <array key="Linotype - AvenirNextLTPro-Bold.otf"> <string>AvenirNextLTPro-Bold</string> </array> <array key="Linotype - AvenirNextLTPro-Regular.otf"> <string>AvenirNextLTPro-Regular</string> </array> <array key="TradeGothicLTPro-BdCn20.otf"> <string>TradeGothicLTPro-BdCn20</string> </array> </customFonts>
źródło
Log family Nazwy pliku czcionek, a następnie uzyskaj dostęp do czcionek:
// You can log all font family names suing **fontNamesForFamilyName** NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);
Mam nadzieję, że ci to pomoże.
źródło
Lista nazw i rodzin czcionek dla macOS w Swift 4.1 :
NSFontManager.shared.availableFonts.map { print($0) } NSFontManager.shared.availableFontFamilies.map { print($0) }
źródło
Obsługiwany Swift 4.0
To jest tylko jeden kod linii do drukowania całej rodziny czcionek i nazw czcionek
override func viewDidLoad() { super.viewDidLoad() //Main line of code UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})}) }
źródło