Czy Mogę osadzić niestandardową czcionkę w aplikacji na iPhone ' a?
To pytanie dotyczy iOS pre-3.2. Od wersji 3.2 funkcjonalność ta jest łatwo osiągalna przy użyciu odpowiedzi samvermette poniżej, a ja zmieniłem akceptowaną odpowiedź (z polecenia na samvermette), aby odzwierciedlić to. Nie mogę przypisać obu odpowiedzi (poza upvotes), ale obie są dobre.
Chciałbym, aby aplikacja zawierała niestandardową czcionkę do renderowania tekstu, ładowała ją, a następnie używała standardowych elementów UIKit
, takich jak UILabel
. Czy to możliwe?
Znalazłem poniżej linki:
- http://discussions.apple.com/thread.jspa?messageID=8304744
- http://forums.macrumors.com/showthread.php?t=569311
Ale to wymagałoby ode mnie renderowania każdego glifu osobiście, co jest trochę zbyt trudne, szczególnie w przypadku tekstu wielowierszowego.
Znalazłem również posty, które mówią wprost, że to niemożliwe, ale bez uzasadnienia, więc szukam ostatecznej odpowiedzi.
Edytuj - nieudany -[UIFont fontWithName:size:]
eksperyment
UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];
Co spowodowało wyrzucenie wyjątku. Przeglądanie pliku TTF w Finderze potwierdziło, że nazwa czcionki brzmiała Harrowprint.
EDIT - do tej pory pojawiło się wiele odpowiedzi, które każą mi przeczytać dokumentację na temat X lub Y. intensywnie eksperymentowałem z wszystkimi to i nigdzie nie ma. W jednym przypadku X okazał się istotny tylko na OS X, a nie na iPhonie. W związku z tym wyznaczam nagrodę za to pytanie i przyznam nagrodę pierwszej osobie, która udzieli odpowiedzi (używając tylko udokumentowanych interfejsów API), która odpowie z wystarczającą ilością informacji, aby to zadziałało na urządzeniu. Praca nad symulatorem też byłaby bonusem.
EDIT - wygląda na to, że bounty automatycznie przyznaje odpowiedź z największą liczbą głosów. Interesujące. Nikt nie dostarczył odpowiedzi, która rozwiązałaby zadane pytanie - rozwiązanie, które polega na kodowaniu własnej podklasy UILabel
, nie obsługuje zawijania słów, co jest dla mnie istotną funkcją - chociaż myślę, że mógłbym to rozszerzyć.
30 answers
IOS 3.2 i Później obsługują to. Prosto z Co nowego w iPhone OS 3.2 doc:
Custom Font Support
Aplikacje, które chcą używać czcionek niestandardowych, mogą teraz włączyć te czcionki do swojego pakietu aplikacji i zarejestrować te czcionki w systemie, włączając klucz UIAppFonts w swoich informacjach.plik plist. Wartość tego klucza jest tablicą łańcuchów identyfikujących pliki czcionek w pakiecie aplikacji. Gdy system widzi klucz, ładuje się określonych czcionek i udostępnia je aplikacji.
Po ustawieniu czcionek w Info.plist
, możesz używać własnych czcionek jak każdej innej czcionki w IB lub programowo.
Trwa wątek na forach programistów Apple:
https://devforums.apple.com/thread/37824 (wymagane logowanie)
A oto doskonały i prosty samouczek w 3 krokach, Jak to osiągnąć (uszkodzony link USUNIĘTY)
- Dodaj własne pliki czcionek w projekcie wykorzystuj Xcode jako zasób
- Dodaj klucz do pliku
Info.plist
o nazwieUIAppFonts
. - niech ten klucz stanie się tablicą
- dla każdej posiadanej czcionki wprowadź pełną nazwę pliku czcionki (wraz z rozszerzeniem) jako pozycje do tablicy
UIAppFonts
- Zapisz
Info.plist
- teraz w aplikacji możesz po prostu wywołać
[UIFont fontWithName:@"CustomFontName" size:12]
, aby uzyskać niestandardową czcionkę do użycia z UILabels i UITextViews, itd...
Również: upewnij się, że czcionki są w Twoim Skopiuj Zasoby Pakietu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-15 12:56:46
Edycja: w systemie iOS 3.2 ta funkcja jest wbudowana. Jeśli potrzebujesz wsparcia pre-3.2, nadal możesz użyć tego rozwiązania.
Stworzyłem prosty moduł, który rozszerza UILabel
i obsługuje ładowanie .pliki ttf. Wydałem go opensource na licencji Apache i umieściłem na GitHubie tutaj.
Ważnymi plikami są FontLabel.h
i FontLabel.m
.
Wykorzystuje część kodu z odpowiedzi Genericricha.
Przeglądaj źródło Tutaj.
Lub
-
Skopiuj plik czcionki do zasobów
-
Dodaj klucz do pliku
Info.plist
o nazwie UIAppFonts. ("Czcionki dostarczone przez aplikację) -
Niech ten klucz stanie się tablicą
-
Dla każdej posiadanej czcionki wprowadź pełną nazwę pliku czcionki (wraz z rozszerzeniem) jako pozycje do tablicy UIAppFonts
Zapisz
Info.plist
-
Teraz w aplikacji możesz po prostu zadzwonić
[UIFont fontWithName:@"CustomFontName" size:15]
do get the custom font to use with yourUILabels
andUITextViews
, etc...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 16:48:09
Jest prosty sposób na użycie niestandardowych czcionek w iOS 4.
- Dodaj swój plik czcionki (na przykład
Chalkduster.ttf
) do folderu Resources projektu w XCode. - Otwórz
info.plist
i dodaj nowy klucz o nazwieUIAppFonts
. Typ tego klucza powinien być array. - Dodaj własną nazwę czcionki do tej tablicy wraz z rozszerzeniem (
Chalkduster.ttf
). - Teraz możesz użyć
[UIFont fontWithName:@"Chalkduster" size:16]
w swojej aplikacji.
Niestety, IB nie pozwala na inicjalizację etykiet za pomocą niestandardowych czcionki. Zobacz to pytanie aby rozwiązać ten problem. Moim ulubionym rozwiązaniem jest użycie niestandardowej UILabel
podklasy:
@implementation CustomFontLabel
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder: decoder])
{
[self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
}
return self;
}
@end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:02
W Info.plist Dodaj wpis "czcionki dostarczone przez aplikację" i dołącz nazwy czcionek jako ciągi znaków:
Fonts provided by application
Item 0 myfontname.ttf
Item 1 myfontname-bold.ttf
...
Następnie sprawdź, czy Twoja czcionka jest włączona, uruchamiając:
for (NSString *familyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"%@", fontName);
}
}
Zauważ, że nazwa pliku ttf może nie być tą samą nazwą, której używasz podczas ustawiania czcionki dla etykiety (możesz użyć powyższego kodu, aby uzyskać parametr "fontWithName"):
[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-16 18:21:15
Edit: ta odpowiedź jest nieaktualna od iOS3. 2; Użyj UIAppFonts
Jedyny sposób, w jaki udało mi się pomyślnie załadować niestandardowe UIFont
S, to użycie prywatnego frameworka GraphicsServices.
Poniżej zostaną załadowane wszystkie czcionki .ttf
w głównym pakiecie aplikacji:
BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
return newFontCount;
}
Po załadowaniu czcionek można ich używać tak jak czcionek dostarczonych przez Apple:
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];
GraphicsServices mogą być ładowane nawet w czasie wykonywania, jeśli API zniknie w przyszłości:
#import <dlfcn.h>
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
if (frameworkPath) {
void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
if (graphicsServices) {
BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
if (GSFontAddFromFile)
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
}
}
return newFontCount;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 00:32:16
Z iOS 8
+ i Xcode 6
+ możesz to łatwo zrobić. Oto kroki:
1) Przeciągnij i upuść czcionkę do folderu Xcode
pliki pomocnicze. Nie zapomnij zaznaczyć swojej aplikacji w sekcji Dodaj do celów. Od tej chwili możesz użyć tej czcionki w IB
i wybrać ją z palety czcionek.
2) Aby udostępnić tę czcionkę w urządzeniu, otwórz info.plist
i dodaj Fonts provided by application
klucz. Będzie on zawierał klucz POZYCJI 0, musisz dodać nazwę czcionki jako wartość. Nazwa czcionki może się różnić od nazwy pliku czcionki. Ale najpierw spróbuj dodać nazwę pliku w większości przypadków ta praca.
Jeśli nie, ten artykuł zawsze mi pomagał.
Oto szybki fragment kodu z tego artykułu, który pomoże Ci znaleźć nazwę czcionki.
func allFonts(){
for family in UIFont.familyNames(){
println(family)
for name in UIFont.fontNamesForFamilyName(family.description)
{
println(" \(name)")
}
}
}
EDIT
Chcę wspomnieć, że musisz dodać pliki czcionek do faz budowania celu , Kopiuj zasoby pakietu . Bez niego czcionka nie będzie widoczna na urządzeniu. Może to prowadzić do nieoczekiwanego zachowania.
Na przykład spotykam bug
, Gdy UITextField
mają niestandardową czcionkę, ale tej czcionki nie było w zasoby pakietu Copy. A kiedy przejdę do viewcontroller
z tym textfield
, nastąpi opóźnienie około 4 sekund przed wywołaniem viewDidLoad
. Rozwiązywanie problemów z czcionką usunęło to opóźnienie. Więc polecam sprawdzić to dwa razy. (rdar://20028250) Btw, nie byłem w stanie odtworzyć błędu, ale jestem pewien, że problem był z czcionką.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-23 13:55:58
Zrobiłem tak:
Załaduj czcionkę:
- (void)loadFont{
// Get the path to our custom font and create a data provider.
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"];
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);
// Create the font with the data provider, then release the data provider.
customFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
}
Teraz w twoim drawRect:
Zrób coś takiego:
-(void)drawRect:(CGRect)rect{
[super drawRect:rect];
// Get the context.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
// Set the customFont to be the font used to draw.
CGContextSetFont(context, customFont);
// Set how the context draws the font, what color, how big.
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
UIColor * strokeColor = [UIColor blackColor];
CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
CGContextSetFontSize(context, 48.0f);
// Create an array of Glyph's the size of text that will be drawn.
CGGlyph textToPrint[[self.theText length]];
// Loop through the entire length of the text.
for (int i = 0; i < [self.theText length]; ++i) {
// Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
}
CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, textTransform);
CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}
W zasadzie musisz zrobić trochę brute force zapętlając tekst i futzing o z magiczną liczbą, aby znaleźć swoje przesunięcie (tutaj, Zobacz Mnie za pomocą 29) w czcionce, ale to działa.
Należy również upewnić się, że czcionka jest legalnie osadzona. Większość nie jest i są prawnicy, którzy specjalizują się w tego typu sprawach, więc ostrzegam.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-07 21:34:27
Jeśli używasz xcode 4.3
, musisz dodać font
do Build Phase
Pod Copy Bundle Resources
, zgodnie z https://stackoverflow.com/users/1292829/arne w wątku własne czcionki Xcode 4.3. To zadziałało dla mnie, oto kroki, które podjąłem, aby niestandardowe czcionki działały w mojej aplikacji:]}
- Dodaj czcionkę do swojego projektu. Przeciągnąłem i upuściłem
OTF
(lubTTF
) Pliki do nowej grupy, którą utworzyłem i zaakceptowałem wybór Xcodecopying the files over to the project folder
. - Utwórz tablicę
UIAppFonts
z Twoim czcionki wymienione jako elementy w tablicy. Tylkonames
, a nie rozszerzenie (np. "GothamBold
", "GothamBold-Italic
"). - Kliknij na
project name
sposób na górzeProject Navigator
po lewej stronie ekranu. - Kliknij kartę
Build Phases
, która pojawi się w głównym obszarze xcode. - rozwiń sekcję"
Copy Bundle Resources
" i kliknij na"+"
, aby dodać czcionkę. - Wybierz plik czcionki z nawigatora plików, który otwiera się po kliknięciu na
"+"
. - zrób to dla każdej czcionki, którą musisz
add to the project
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:18
Tak, możesz dołączyć własne czcionki. Zapoznaj się z dokumentacją UIFont, w szczególności z metodą fontWithName:size:
.
1) Upewnij się, że umieściłeś czcionkę w folderze zasoby.
2) "Nazwa" czcionki niekoniecznie jest nazwą pliku.
3) Upewnij się, że masz prawo do używania tej czcionki. Umieszczając go w aplikacji, rozpowszechniasz go i musisz mieć do tego prawo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-12 01:18:13
Oto instrukcje krok po kroku jak to zrobić. Nie potrzebujesz dodatkowej biblioteki ani specjalnego kodowania.
Http://shang-liang.com/blog/custom-fonts-in-ios4/
Najczęściej problem dotyczy czcionki, a nie metody. Najlepszym sposobem na to jest użycie czcionki, która na pewno będzie działać, jak verdana lub geogia. Następnie zmień na zamierzoną czcionkę. Jeśli to nie działa, może Nazwa czcionki jest nieprawidłowa lub czcionka nie jest dobrze sformatowana.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-19 11:28:38
Bardzo łatwo jest dodać nową czcionkę do istniejącej aplikacji na iOS.
Wystarczy dodać czcionkę np. font.ttf do folderu zasobów.
Otwórz aplikację info.plist
. Dodaj nowy wiersz jako "czcionki dostarczone przez aplikację" i wpisz nazwę czcionki jako czcionkę.ttf.
I podczas ustawiania czcionki wykonaj jako setFont:"corresponding Font Name"
Możesz sprawdzić, czy Twoja czcionka jest dodana, czy nie przez NSArray *check = [UIFont familyNames];
.
Zwraca całą czcionkę obsługi aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 13:12:55
Polecam jeden z moich ulubionych krótkich tutoriali tutaj: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app / z którego pochodzi ta informacja.
Krok 1-Przeciągnij swój .ttf lub .otf z Findera do Twojego projektu
Uwaga-Pamiętaj, aby kliknąć pole "Dodaj do celów" na głównym celu aplikacji
Jeśli zapomniałeś kliknąć, aby dodać go do celu, kliknij na pliku czcionek w hierarchii projektu i po prawej stronie kliknij Główny obiekt docelowy aplikacji w sekcji Target Membership
Aby upewnić się, że czcionki są częścią docelowej aplikacji, upewnij się, że pojawiają się w Copy Bundle Resources W fazach budowania
Krok 2-Dodaj nazwy plików czcionek do Plist
Przejdź do niestandardowych właściwości docelowych iOS w Twoim Info Sekcja i dodaj klucz do elementów w tej sekcji o nazwie Fonts provided by application
(Powinieneś zobaczyć, że pojawia się jako opcja podczas wpisywania i ustawi się jako tablica. Kliknij małą strzałkę, aby otworzyć elementy tablicy i wpisz nazwy .ttf lub .pliki otf, które dodałeś, aby poinformować aplikację, że są to Pliki czcionek, które chcesz mieć dostępne
UWAGA - Jeśli aplikacja ulegnie awarii zaraz po tym kroku, sprawdź pisownię na dodanych elementach tutaj
Krok 3-Znajdź nazwy czcionek, aby móc je nazywać
Dość często nazwa czcionki widziana przez Twoją aplikację różni się od nazwy pliku dla tej czcionki, umieść ją w kodzie i przejrzyj dziennik, który tworzy Twoja aplikacja, aby zobaczyć, jaką nazwę czcionki wywołać w kodzie
Swift
for family: String in UIFont.familyNames(){
print("\(family)")
for names: String in UIFont.fontNamesForFamilyName(family){
print("== \(names)")
}
}
Objective C
for (NSString* family in [UIFont familyNames]){
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family]){
NSLog(@" %@", name);
}
}
Twój dziennik powinien wyglądać jak to:
Krok 4-Użyj nowej niestandardowej czcionki używając nazwy z kroku 3
Swift
label.font = UIFont(name: "SourceSansPro-Regular", size: 18)
Objective C
label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 16:53:57
Znajdź TTF w Finderze i "uzyskaj informacje". Pod nagłówkiem "pełna nazwa:" dała mi nazwę, którą następnie użyłem z fontWithName
(właśnie skopiowałem i wkleiłem dokładną nazwę, w tym przypadku nie".konieczne było przedłużenie TTF).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-07 01:16:18
Jedna ważna uwaga: powinieneś używać" nazwy postscriptowej " związanej z czcionką, a nie jej pełnej nazwy lub nazwy rodziny. Nazwa ta często może różnić się od zwykłej nazwy czcionki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-15 16:40:06
To jeszcze nie jest, ale następna wersja cocos2d (2D game framework) będzie obsługiwać czcionki Bitmapowe o zmiennej długości jako mapy znaków.
Http://code.google.com/p/cocos2d-iphone/issues/detail?id=317
Autor nie ma daty wydania tej wersji, ale widziałem Post, który wskazywał, że będzie w przyszłym miesiącu lub dwóch.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-27 22:56:36
Wykonaj ten krok
1)skopiuj czcionkę do projektu
2) Otwórz plik .plist
w trybie kodu źródłowego...(Note-Dont open info.plist
)
3) wcześniej-kliknij prawym przyciskiem myszy na czcionkę i otwórz ją w fontforge lub podobnym edytorze i install
to w Twoim systemie, powinno być install
4) Wpisz to
<key>UIAppFonts</key>
<array>
<string>MyriadPro.otf</string>
</array>
5) Wpisz ten kod w swoim class .m
[lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];
Tutaj lblPoints zostaną zmienione w zależności od Twojego UILabel
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 16:28:29
Może autor zapomniał nadać czcionce nazwę Mac FOND?
- Otwórz czcionkę w FontForge Następnie przejdź do Element>Font Info
- istnieje opcja "Mac", w której możesz ustawić nazwę fondue.
- w sekcji Plik > Eksportuj czcionkę możesz utworzyć nowy ttf
Możesz również spróbować opcji "Apple" w oknie eksportowym.
DISCLAIMER: nie jestem programistą IPhone ' a!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-01 01:19:38
Połączyłem niektóre porady na tej stronie w coś, co działa dla mnie na iOS 5.
Najpierw musisz dodać niestandardową czcionkę do swojego projektu. Następnie musisz postępować zgodnie z radami @iPhoneDev i dodać czcionkę do swoich informacji.plik plist.
Po zrobieniu tego, to działa:
UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];
Musisz jednak znać nazwę czcionki Postscript. Po prostu postępuj zgodnie z radami @Daniel Wood i naciśnij command-i, gdy jesteś w FontBook.
Więc ciesz się swoim zwyczajem font.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-03 16:13:27
Najpierw dodaj czcionkę .format odt do Twoich zasobów, w tym przypadku użyjemy DINEngschriftStd.otf, następnie użyj tego kodu, aby przypisać czcionkę do etykiety
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
Aby upewnić się, że czcionka jest załadowana do projektu, wystarczy zadzwonić
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
Na .plist musisz zadeklarować czcionkę. Wystarczy dodać rekord "Fonts provided by application" i dodać ciąg POZYCJI 0 z nazwą czcionki (DINEngschriftStd.otf)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-26 09:58:53
Dla iOS 3.2 i nowszych: Użyj metod podanych przez kilka powyżej, które są:
- Dodaj swój plik czcionki (na przykład Chalkduster.ttf ) do folderu zasobów projektu w XCode.
- Otwórz info.plist i dodać nowy klucz o nazwie UIAppFonts. Typ tego klucza powinien być array.
- Dodaj własną nazwę czcionki do tej tablicy wraz z rozszerzeniem ("Chalkduster.ttf ").
- Użyj
[UIFont fontWithName:@"Real Font Name" size:16]
w swojej aplikacji.
Ale "Prawdziwa Czcionka Nazwa " nie zawsze jest tą, którą widzisz w Fontbooku. Najlepszym sposobem jest pytanie urządzenia, które czcionki widzi i jakie są dokładne nazwy.
Używam uifont-name-grabber zamieszczonego na: uifont-name-grabber
Po prostu upuść czcionki, które chcesz do projektu xcode, Dodaj nazwę pliku do jego plisty i uruchom go na urządzeniu, dla którego budujesz, wyśle Ci pełną listę czcionek, używając nazw, które UIFont fontWithName:
oczekuje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 10:45:01
Wypróbowałem różne sugestie na tej stronie na iOS 3.1.2 i oto moje wnioski:
Samo użycie [UIFont fontWithName:size:]
z czcionkami w katalogu Resources nie będzie działać, nawet jeśli nazwa fondue jest ustawiona za pomocą FontForge.
[UIFont fontWithName:size:]
będzie działać, jeśli czcionki zostaną załadowane najpierw za pomocą GSFontAddFromFile. Ale GSFontAddFromFile
nie jest częścią iOS 3.1.2, więc musi być ładowany dynamicznie zgodnie z opisem @rpetrich.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 13:11:11
Lepszym rozwiązaniem jest dodanie nowej właściwości "Fonts provided by application
" do pliku info.plist
.
Następnie możesz użyć niestandardowej czcionki jak normalna UIFont
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 13:11:49
Look up ATSApplicationFontsPath
Prosty wpis plist, który pozwala na dołączenie plików czcionek do folderu zasobów aplikacji i "po prostu działa" w aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-09 11:59:46
Istnieje nowy sposób korzystania z niestandardowych czcionek, począwszy od iOS 4.1. Umożliwia dynamiczne ładowanie czcionek, niezależnie od tego, czy pochodzą one z plików dołączonych do aplikacji, pobranych danych, czy z tego, co masz. Umożliwia również ładowanie czcionek zgodnie z ich potrzebami, podczas gdy stara metoda ładuje je wszystkie podczas uruchamiania aplikacji, co może trwać zbyt długo, jeśli masz wiele czcionek.
Nowa metoda jest opisana w iOS-dynamic-font-loading
Używasz funkcji CTFontManagerRegisterGraphicsFont
, dając jej bufor z danymi czcionki. Jest wtedy Dostępny dla UIFont
i web views, tak jak w przypadku starej metody. Oto przykładowy kod z tego linku:
NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error)
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 10:58:39
Możesz dodać wymagane pliki "czcionki" w folderze zasoby. Następnie przejdź do pliku projektu Info.plist
i użyj klucza "czcionki dostarczone przez aplikację" i wartość jako "nazwa czcionki".
Następnie można wywołać metodę [UIFont fontwithName:@"FONT NAME" size:12];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 13:13:38
Swift, code way: (działa również z swift 2.0)
Dodaj wymagane czcionki do projektu (tak jak dodawanie obrazów, po prostu przeciągnij do Xcode), upewnij się, że są one kierowane do projektu
dodaj tę metodę i załaduj własne czcionki (zalecane w appDelegate didFinishLaunchingWithOptions
)
func loadFont(filePath: String) {
let fontData = NSData(contentsOfFile: filePath)!
let dataProvider = CGDataProviderCreateWithCFData(fontData)
let cgFont = CGFontCreateWithDataProvider(dataProvider)!
var error: Unmanaged<CFError>?
if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
print("Unable to load font: %@", errorDescription, terminator: "")
}
}
Użyj przykładu:
if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
loadFont(fontPath)
}
Użyj czcionki:
UIFont(name: "My-Font", size: 16.5)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 10:53:54
Zrobiłem wszystko możliwe, ale nowe czcionki nie pojawiają się więc znalazłem rozwiązanie:
Podczas przeciągania plików fot (otf lub ttf) nie zapomnij zaznaczyć pola wyboru "Dodaj do celów".
Po wykonaniu tej czynności pojawi się Twoja czcionka i wszystko będzie działać poprawnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-28 15:34:35
Chociaż niektóre z powyższych odpowiedzi są poprawne, napisałem szczegółowy samouczek wizualny dla osób, które nadal mają problemy z czcionkami.
Powyższe rozwiązania nakazują dodanie czcionki do plist i użycie
[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];
Są poprawne. Proszę teraz użyć innego hackish sposób. Jeśli nadal masz problemy ze znalezieniem nazw czcionek i ich dodaniem, oto samouczek -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 10:58:32
Tak możesz używać własnej czcionki w swojej aplikacji
Krok po kroku:
Dodaj własne pliki czcionek do projektu w plikach pomocniczych
Dodaj klucz do swoich informacji.plik plist o nazwie UIAppFonts.
Niech ten klucz stanie się tablicą
Dla każdej posiadanej czcionki wprowadź pełną nazwę pliku czcionki (wraz z rozszerzeniem) jako pozycje do tablicy UIAppFonts
Zapisz Info.plist teraz w aplikacji można po prostu zadzwonić [UIFont fontWithName:@" your Custom font Name " size: 20] aby uzyskać niestandardową czcionkę do użycia z UILabels po zastosowaniu tego, jeśli nie masz poprawnej czcionki, kliknij dwukrotnie na niestandardową czcionkę i zobacz uważnie górną stronę nazwy czcionki i skopiuj tę czcionkę, wklej tutaj [UIFont fontWithName:@" here past your Custom font Name" size: 20]
Mam nadzieję, że otrzymasz poprawną odpowiedź
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-26 07:00:11
Tak możesz użyć niestandardowej czcionki w swojej aplikacji
Krok po kroku:
- Dodaj własne pliki czcionek do projektu w plikach pomocniczych
- Dodaj klucz do pliku
Info.plist
o nazwie UIAppFonts. - niech ten klucz stanie się tablicą
- dla każdej posiadanej czcionki wprowadź pełną nazwę pliku czcionki (wraz z rozszerzeniem) jako pozycje do tablicy UIAppFonts
- Zapisz
Info.plist
Teraz w aplikacji możesz po prostu zadzwonić[UIFont fontWithName:@"your Custom font Name" size:20]
, aby uzyskać niestandardowe czcionka do użycia z twoimUILabels
Po zastosowaniu tego, jeśli nie masz poprawnej czcionki
następnie klikasz dwukrotnie na niestandardową czcionkę i widzisz uważnie nazwę czcionki z górnej strony
i skopiuj tę czcionkę, wklej tutaj [UIFont fontWithName:@" here past your Custom font Name" size:20]
mam nadzieję, że otrzymasz poprawną odpowiedź
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 18:15:03