Czcionki niestandardowe w systemie iOS 7

Rozwijam grę i chciałbym użyć niestandardowej czcionki w mojej aplikacji. Używam do tego Spritekita, jeśli to ważne. Próbowałem użyć tego https://github.com/deni2s/IBCustomFonts ale nie mogę go uruchomić z tą czcionką http://www.fontspace.com/freaky-fonts/emulogic

Próbowałem różnych rzeczy i zarejestrowałem czcionkę w info.plist aplikacji... Czy ktoś wie o co chodzi?

Author: sangony, 2014-02-12

9 answers

Po pierwsze zakładam, że SpriteKit nie robi żadnej różnicy.

  1. potrzebujesz swojej czcionki .otf lub .TTF skopiowany do twojego projektu. Na przykład w plikach pomocniczych.
  2. musisz edytować .plist Plik. Dodaj "Fonts provided by application" Klucz do plist i w pozycja 0 skopiuj dokładną nazwę pliku skopiowanej czcionki do plików pomocniczych z rozszerzeniem. Na przykład: "JosefinSansStd-Light_0.otf "
  3. Upewnij się, że czcionka, którą zaimportowany do aplikacji jest pakowany do samej aplikacji. Zrób to, wybierając Cel, następnie fazy budowania, a następnie skopiuj zasoby pakietu. Jeśli nie widzisz tam swojej czcionki, przeciągnij ją z plików pomocniczych .

Wreszcie, chcesz wyświetlić listę wszystkich czcionek, gdy aplikacja uruchomi się, aby zobaczyć użyteczną nazwę czcionki. Zrobisz to z tym małym kawałkiem kodu:

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

Wyszukaj czcionkę w wydrukowanych wynikach, na przykład I szukałbym "Josefin" i zobaczyłbym, że rzeczywista nazwa czcionki to "JosefinSansStd-Light". Następnie wystarczy użyć tej czcionki przez:

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

W iOS8 możesz dodać swoje czcionki bezpośrednio do projektu i są one widoczne w kreatorze interfejsów. Zmodyfikuj swój kod, aby uwzględnić to, ale programowo ustawiając czcionkę dla iOS7 i wybierając ją w xcode6 interface builder. PS. Interface builder w xCode6 daje prawidłową nazwę czcionki, którą można skopiować i wkleić do kodu poniżej.

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }
Mam nadzieję, że to pomoże, zdrówko.
 277
Author: jovanjovanovic,
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:14

Nie ma problemu z używaniem niestandardowych czcionek, zrobiłem to. Wykonaj następujące kroki:

  1. Zarejestruj czcionkę w swoich informacjach.plist dodanie wpisu "czcionki dostarczone przez aplikację". Wpisz nazwę pliku czcionki, a nie nazwę czcionki. Jak czcionka.ttf (I think you already did that)
  2. Przejdź do swojego projektu w Nawigatorze projektu, kliknij nazwę projektu i przejdź do "fazy budowania", a następnie spójrz w dół w "Kopiuj zasoby pakietu" przejdź na dół, jest wiele plików i wyszukaj znak"+". Wyskakujące okno otworzy się z plikami projektu. Wyszukaj plik czcionki i dodaj go do pakietu.
  3. na koniec sprawdź nazwę czcionki. Gdy używasz go w kodzie, musisz użyć nazwy czcionki, a nie nazwy pliku. Aby poznać nazwę czcionki, kliknij dwukrotnie plik czcionki w Finderze, a otworzy się okno z czcionką. Sprawdź tytuł okna, to jest nazwa czcionki, której musisz użyć.

I Rada, dodaj tę nazwę jako makro w swoim ..Prefiks.plik pch. Będzie łatwiej go używać w Twój projekt, jeśli musisz użyć czcionki wiele razy.

Problem, który wydaje mi się, że miałeś jest to, że poprawnie zarejestrowałeś czcionkę, ale nie została skopiowana do pakietu aplikacji. Tak więc po uruchomieniu aplikacji nie można znaleźć czcionki. Dlatego Krok 2 jest ważny. Spędziłem dużo czasu próbując to rozgryźć za pierwszym razem:)

 24
Author: zago,
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-02-12 19:47:07

Aby to osiągnąć w swift

Jeśli chcesz wyświetlić listę wszystkich czcionek po uruchomieniu aplikacji, aby zobaczyć użyteczną nazwę czcionki. Możesz to zrobić za pomocą tego małego kawałka kodu:

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }
 20
Author: Toye,
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-08-21 20:25:57

Nigdy nie byłem w stanie uzyskać tych odpowiedzi do pracy, próbowałem wiele razy. Jedyny sposób, w jaki kiedykolwiek dostałem niestandardową czcionkę, aby postępować zgodnie z Instrukcją w zaakceptowanej odpowiedzi, a następnie utworzyć ukrytą etykietę na tablicy historii, która używa czcionki. Mogę używać czcionki programowo. Dziwne i chwiejne, wiem, ale u mnie zadziałało.

 5
Author: Stuart Clark,
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-20 19:40:54

Jeśli jesteś w Xcode 6 to jest tak proste, jak to tylko możliwe. Po prostu Dodaj folder font do swojego projektu, Dodaj swoje czcionki do folderu i gotowe.

Tutaj wpisz opis obrazka

 3
Author: Idris,
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-10-28 16:52:07

Jeśli żadna z powyższych metod nie zadziałała dla Ciebie, a zdarzy ci się użyć tylko "programowo" swojej niestandardowej czcionki (tzn. nie użyłeś jej w żadnym xib), będziesz musiał użyć jej przynajmniej raz gdzieś w jednym xib, gdziekolwiek.

(P. S. Stuart Clark-już na to odpowiedział, więc nie zasługuję na to, proszę. Jednak postanowiłem przeformułować i opublikować ją jako oddzielną odpowiedź, ponieważ przegapiłem jego odpowiedź, nie było dla mnie jasne, kiedy ją czytałem. Odkryłem to rozwiązanie przypadkiem, kiedy testowałem niestandardowa czcionka w xib i widziałem, że działa programowo gdzie indziej, ale kiedy usunąłem czcionkę z xib, przestała działać programowo.)

 3
Author: Wojtek,
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
2016-05-02 19:55:05

Aktualizacja dla Swift 3.

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}
 2
Author: Gavin Williams,
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
2016-09-10 21:06:58

Może szybka poprawka - to mi się udało, gdy czcionka już zadziałała, ale nowa np. etykieta nie pokazała pożądanej czcionki:

Czysty, głęboko czysty i pusty folder danych pochodnych.

 0
Author: brainray,
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-06-23 21:36:42
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
 0
Author: herry.master,
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-10-23 05:47:45