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:

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

Ściągnąłem Harrowprint.tff (pobrany z tutaj ) i dodał go do mojego katalogu zasobów i do projektu. Następnie wypróbowałem ten kod:
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ć.

Author: Super Developers, 2008-12-11

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)

  1. Dodaj własne pliki czcionek w projekcie wykorzystuj Xcode jako zasób
  2. Dodaj klucz do pliku Info.plist o nazwie UIAppFonts.
  3. niech ten klucz stanie się tablicą
  4. dla każdej posiadanej czcionki wprowadź pełną nazwę pliku czcionki (wraz z rozszerzeniem) jako pozycje do tablicy UIAppFonts
  5. Zapisz Info.plist
  6. 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.

 626
Author: samvermette,
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 your UILabels and UITextViews, etc...

Więcej Informacji

 291
Author: commanda,
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.

  1. Dodaj swój plik czcionki (na przykład Chalkduster.ttf) do folderu Resources projektu w XCode.
  2. Otwórz info.plist i dodaj nowy klucz o nazwie UIAppFonts. Typ tego klucza powinien być array.
  3. Dodaj własną nazwę czcionki do tej tablicy wraz z rozszerzeniem (Chalkduster.ttf).
  4. 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
 112
Author: alexey,
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]];
 50
Author: bdev,
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 UIFontS, 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;
}
 35
Author: 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
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.

Tutaj wpisz opis obrazka

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.

Tutaj wpisz opis obrazka

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ą.

 31
Author: Dima Deplov,
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.

 26
Author: Genericrich,
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:]}

  1. Dodaj czcionkę do swojego projektu. Przeciągnąłem i upuściłem OTF (lub TTF) Pliki do nowej grupy, którą utworzyłem i zaakceptowałem wybór Xcode copying the files over to the project folder.
  2. Utwórz tablicę UIAppFonts z Twoim czcionki wymienione jako elementy w tablicy. Tylko names, a nie rozszerzenie (np. "GothamBold", "GothamBold-Italic").
  3. Kliknij na project name sposób na górze Project Navigator po lewej stronie ekranu.
  4. Kliknij kartę Build Phases, która pojawi się w głównym obszarze xcode.
  5. rozwiń sekcję" Copy Bundle Resources" i kliknij na "+", aby dodać czcionkę.
  6. Wybierz plik czcionki z nawigatora plików, który otwiera się po kliknięciu na "+".
  7. zrób to dla każdej czcionki, którą musisz add to the project.
 20
Author: SKris,
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.

 19
Author: August,
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.

 12
Author: 5566,
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.

 12
Author: Subrat,
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

Przeciągnij pliki czcionek do projektu i kliknij, aby dodać je do celu

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

jak dodać czcionki do docelowej aplikacji, Jeśli zapomniałeś

Aby upewnić się, że czcionki są częścią docelowej aplikacji, upewnij się, że pojawiają się w Copy Bundle Resources W fazach budowania

jak sprawdzić zasoby, aby sprawdzić, czy czcionki są częścią celu aplikacji

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

przykładowy plist z dodanymi niestandardowymi czcionkami

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:

Przykład wyszukiwania dziennika w celu znalezienia nazw czcionek

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];
 10
Author: ColossalChris,
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).

 9
Author: Nano,
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.

 8
Author: user576862,
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.

 7
Author: John,
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

Zrobione!! Jeśli czcionka nadal nie działa,sprawdź czcionki compatibility first
 6
Author: Kirtikumar 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
2018-02-22 16:28:29

Może autor zapomniał nadać czcionce nazwę Mac FOND?

  1. Otwórz czcionkę w FontForge Następnie przejdź do Element>Font Info
  2. istnieje opcja "Mac", w której możesz ustawić nazwę fondue.
  3. 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!

 5
Author: ByteNirvana,
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.

 5
Author: AaronBaker,
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)

 5
Author: Alejandro Luengo,
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ą:

  1. Dodaj swój plik czcionki (na przykład Chalkduster.ttf ) do folderu zasobów projektu w XCode.
  2. Otwórz info.plist i dodać nowy klucz o nazwie UIAppFonts. Typ tego klucza powinien być array.
  3. Dodaj własną nazwę czcionki do tej tablicy wraz z rozszerzeniem ("Chalkduster.ttf ").
  4. 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.

 5
Author: Jarson,
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.

 5
Author: Jacob Wallström,
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.

 5
Author: RichX,
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.

 4
Author: Matt Sephton,
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);
 3
Author: David M.,
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];

 2
Author: Nishan29,
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)
 2
Author: Daniel Krom,
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.

 1
Author: ElizaS,
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 -

Używanie niestandardowych czcionek w aplikacji ios

 1
Author: Bharat Gulati,
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ź

 1
Author: Akhil Bhadauria,
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 twoim UILabels

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ź

 1
Author: user2691469,
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