Bir iPhone uygulamasına özel bir yazı tipi ekleyebilir miyim?


772

Bir uygulamanın, metni oluşturmak, yüklemek ve daha sonra standart UIKitöğelerle kullanmak için özel bir yazı tipi içermesini istiyorum UILabel. Mümkün mü?


5
Stanford'daki CS193p (iPhone Uygulama Geliştirme) derslerinden birinde Evan, kendi yazı tipinizi bir cihaza kurmanın “çok fazla iş” olduğunu kaydetti, bu da en azından mümkün olduğu anlamına geliyor :-)
Ilya Birman

2
iPhone 3.2 özel yazı tipine izin veriyor, ancak sadece iPad (aşağıdaki cevaba bakın)
samvermette

6
Sonunda görüntüler kullandım.
Airsource Ltd

2
vay ... tüm bunlardan sonra, cevap hala imgeler ... inanılmaz. Gerçekten, sistem fontlarıyla aynı özelliğe sahip özel fontların sağlam bir şekilde uygulanmasını umuyordum. ne yazık ki ...
d2burke

1
Sorduğumdan bu yana geçen on yılı yansıtmak için orijinal soruyu büyük ölçüde düzelttim. Diğer herkesi yorum ve cevaplarını uygun şekilde düzeltmeye teşvik ediyorum.
Airsource Ltd

Yanıtlar:


646

iOS 3.2 ve sonraki sürümler bunu desteklemektedir. Doğrudan iPhone OS 3.2'deki Yeniliklerden :

Özel Yazı Tipi Desteği
Özel yazı tiplerini kullanmak isteyen uygulamalar artık bu yazı tiplerini uygulama paketlerine ekleyebilir ve bu yazı tiplerini Info.plist dosyalarına UIAppFonts anahtarını ekleyerek sisteme kaydedebilir. Bu anahtarın değeri, uygulamanın paketindeki yazı tipi dosyalarını tanımlayan bir dizeler dizisidir. Sistem anahtarı gördüğünde, belirtilen yazı tiplerini yükler ve bunları uygulama için kullanılabilir hale getirir.

Yazı tipleri ayarlandıktan sonra Info.plist, özel yazı tiplerinizi IB'deki veya programlı olarak başka bir yazı tipi olarak kullanabilirsiniz.

Apple Geliştirici Forumları'nda devam eden bir konu var:
https://devforums.apple.com/thread/37824 (giriş gerekli)

Ve işte bunu başarmak için mükemmel ve basit bir 3 adım öğretici (kırık bağlantı kaldırıldı)

  1. Kaynak olarak Xcode kullanarak özel yazı tipi dosyalarınızı projenize ekleyin
  2. Info.plistDosyanıza bir anahtar ekleyin UIAppFonts.
  3. Bu anahtarı bir dizi yap
  4. Sahip olduğunuz her yazı tipi için, UIAppFontsdiziye öğe olarak yazı tipi dosyanızın tam adını (uzantı dahil) girin
  5. Kayıt etmek Info.plist
  6. Şimdi uygulamanızda UILabels ve UITextViews , vb [UIFont fontWithName:@"CustomFontName" size:12]ile kullanmak için özel yazı tipini almak için arayabilirsiniz ...

Ayrıca: Yazı tiplerinin Kopyalama Paketi Kaynaklarınızda olduğundan emin olun.


14
İşte iOS4 için adım adım eğitim: blog.beefyapps.com/2010/06/custom-fonts-in-ios-4
pm_labs

15
Bu eğitim çok iyi. shang-liang.com/blog/custom-fonts-in-ios4 Önemli olarak, [UIFont fontWithName: ...] için NSString bağımsız değişkeni , dosya adı yerine yazı tipi için işletim sistemi adıdır.
Willster

152
Başka hiç kimse iOS tarafından gereken yazı tipinin gerçek postscript adını bulmak için fontforge'u yüklemek için 3 saat harcamadan önce. Bu bilgiyi bulmak için yazı tipi kitabındaki yazı tipinde Cmd + I tuşlarına basabileceğinizi belirteceğim.
Daniel Wood

42
Doğru yazı tipi adını almak için uğraştıktan sonra, yüklü yazı tiplerini listeledim ve buldum. Çok yararlı. İşte kod: [UIFont familyNames] içindeki (NSString * familyName) {NSLog (@ "Family% @", familyName); NSLog (@ "Adlar =% @", [UIFont fontNamesForFamilyName: familyName]); }
Steve Potter

26
Kodunuz çalışmıyorsa, yazı tipi dosyasının "Derleme Aşamaları" -> "Paket Kaynaklarını Kopyala"
Mickey

299

Düzenleme: iOS 3.2'den itibaren bu işlevsellik yerleşiktir. 3.2 öncesi desteği gerekiyorsa, yine de bu çözümü kullanabilirsiniz.

UILabelYükleme .ttf dosyalarını genişleten ve işleyen basit bir modül oluşturdum . Açık kaynak kodunu Apache lisansı altında yayınladım ve burada github'a koydum .

Önemli dosyalar FontLabel.hve FontLabel.m.

Genericrich'in cevabındaki bazı kodları kullanır .

Kaynağa buradan göz atın .

VEYA

  • Yazı tipi dosyanızı kaynaklara kopyalayın

  • Info.plistDosyanıza UIAppFonts adlı bir anahtar ekleyin. ("Uygulama tarafından sağlanan yazı tipleri)

  • Bu anahtarı bir dizi yap

  • Sahip olduğunuz her yazı tipi için UIAppFonts dizisine öğe olarak yazı tipi dosyanızın tam adını (uzantı dahil) girin

  • Kayıt etmek Info.plist

  • Şimdi uygulamanızda sadece çağırabilir [UIFont fontWithName:@"CustomFontName" size:15]inizle kullanımına özel yazı tipi almak UILabelsve UITextViews, vs ...

Daha fazla bilgi için


2
Kodunuzu kullanmayı denedim ama yazı tipine bağlı olarak oldukça sık çöküyor. Örneğin, buradan gelen Afrika veya Tiki yazı tiplerini kullanmayı deneyin . Fontspace.com/category/tiki .
4thSpace

2
Bu kütüphane harika çalışıyor. Yine de dikey boşluk konusunda yardıma ihtiyacım var. Nasıl yapılacağını anlayamıyorum. Yani bu mesajı aldım.numberOfLines = 3; Satır 1 ile satır 2 ve satır 3 arasındaki dikey boşluğu nasıl kontrol ederim? Teşekkür ederim, Tee
teepusink

2
@commanda Merhaba commanda, cevabınızda verdiğiniz bağlantı mevcut değil.
Parth Bhatt

5
@ParthBhatt FontLabel yerine stackoverflow.com/a/2616101/21447'de sağlanan çözümü kullanmalısınız , çünkü bu işlev artık CocoaTouch tarafından sağlanmaktadır.
commanda

2
@ParthBhatt: Repo'nun neden zynga'da barındırılmadığını bilmiyorum, ancak github.com/kballard/fontlabel
Lily Ballard

116

İOS 4'te özel yazı tiplerini kullanmanın basit bir yolu vardır .

  1. Yazı tipi dosyanızı (örneğin Chalkduster.ttf) XCode'daki projenin Kaynaklar klasörüne ekleyin .
  2. Adlı info.plistyeni bir anahtarı açın ve ekleyin UIAppFonts. Bu anahtarın türü dizi olmalıdır.
  3. Özel yazı tipi adınızı uzantı ( Chalkduster.ttf) dahil olmak üzere bu diziye ekleyin .
  4. Artık [UIFont fontWithName:@"Chalkduster" size:16]uygulamanızda kullanabilirsiniz .

Ne yazık ki IB, etiketlerin özel yazı tipleriyle başlatılmasına izin vermiyor. Bu sorunu çözmek için bu soruya bakın . En sevdiğim çözüm özel UILabelalt sınıf kullanmaktır :

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end

3
Bu sadece 4.0+ değil, 3.2'ye kadar destekleniyor gibi görünüyor
Jesse Rusak

1
Teşekkürler! Yaşadığım sorun, özel yazı tiplerinin yerleşik muadillerine göre biraz yüksek (aşağıda fazladan boşluk) eğilmiş gibi görünüyor. GitHub'dan FontLabel repo'yu kullanmayı denedim, bu da zaman zaman yardımcı oluyor, ama her zaman değil.
Joe D'Andrea

12
UIFont yapıcısına ilettiğiniz dize , dosya adı eksi yazı tipinin dahili adı DEĞİLDİR . Kısalttığım dosya adıyla yazı tipi yüklerken sorunlar yaşadım. Dosyada içerdiği tüm yazı tipi adını kullandığımda yazı tipi iyi yüklendi.
slayton

5
Slayton'un söylediği şey kritik. [UIFont fontWithName: yazı tipinin Yazı Tipi Kitabında açılarak ve aşağıdakileri seçerek görünen "Tam ad" ını bekler: Önizleme -> Yazı Tipi Bilgilerini Göster
electromaggot

51

Info.plist'e "Uygulama tarafından sağlanan fontlar" girişini ekleyin ve font adlarını dizeler olarak ekleyin:

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

Ardından, yazı tipinin çalıştırarak dahil edildiğinden emin olun:

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
         NSLog(@"%@", fontName);
    }
}

TTF dosya adınızın, etiketiniz için yazı tipini ayarlarken kullandığınız adla aynı olmayabilir ("fontWithName" parametresini almak için yukarıdaki kodu kullanabilirsiniz):

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];

36

edit: Bu cevap iOS3.2'den itibaren geçersiz; UIAppFonts kullanın

UIFontÖzel s'leri başarıyla yükleyebilmemin tek yolu özel GraphicsServices çerçevesidir.

Aşağıdakiler .ttfuygulamanın ana paketine tüm yazı tiplerini yükler :

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;
}

Yazı tipleri yüklendikten sonra, Apple tarafından sağlanan yazı tipleri gibi kullanılabilirler:

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

API'nın gelecekte kaybolması durumunda GraphicsServices çalışma zamanında bile yüklenebilir:

#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;
}

merak edenlere dikkat edin, bu işe yarar, ancak yazı tipini kullanmadan hemen önce loadFonts'u çağırmanız gerekir - uygulama boyunca yüklü kalmazlar
pixel

OS 3.0'da kesinlikle ikinci ikinci örneği kullanmanız gerekir, içe aktarmayı unutmayın. Benim için oldukça iyi çalıştı.
M.Ryan

Başka bir not - bu özel bir çerçevedir ve dinamik olarak yükler ... her ikisi de uygulamanızın AppStore'a kabul edilmesini durduracaktır.
piksel

Sonuç nedir? Bu yöntemin alternatifleri nelerdir?
Raj Pawan Gumdal

1
Ayrıca [NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];denediğim herhangi bir özel yazı tipi için 0 genişlik ve yükseklik döndürdüğünü de unutmayın .
Luke Mcneice

34

İle iOS 8+ ve Xcode 6+ kolayca bu yapabilirsiniz. İşte adımlar:

1) Yazı tipinizi XcodeDestek Dosyaları klasörüne sürükleyip bırakın . Uygulamanızı Hedeflere ekle bölümünde işaretlemeyi unutmayın . Bu andan itibaren bu yazı tipini kullanabilir IBve yazı tipi paletinden seçebilirsiniz.

resim açıklamasını buraya girin

2) Bu yazı tipini cihazınızda kullanılabilir yapmak için, anahtarınızı açın info.plistve Fonts provided by applicationanahtar ekleyin . Öğe 0 anahtarını içerecektir, yazı tipi adınızı değer olarak eklemeniz gerekir. Yazı tipi adı, yazı tipi dosya adınızdan farklı olabilir. Ama önce, bu durumda dosya adınızı çoğu durumda eklemeyi deneyin.

resim açıklamasını buraya girin

Değilse, bu makale her zaman bana yardımcı oldu.

Yazı tipi adınızı bulmanıza yardımcı olmak için bu makaledeki kodun hızlı snippet'i.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

DÜZENLE

Hedefinizin Oluşturma Aşamaları , Paket Kaynaklarını Kopyala'ya yazı tipi dosyaları eklemeniz gerektiğini belirtmek isterim . Bu olmadan, yazı tipinizi cihazda görmezsiniz. Ve bu beklenmedik davranışlara yol açabilir.

Örneğin, ben bir karşılaşmaya bugzaman, UITextFieldözel yazı tipi var, ama bu yazı değildi Kopya Paketi Kaynakları . Ve viewcontrollerbununla selamladığımda textfield, viewDidLoadfonksiyon çağrılmadan önce yaklaşık 4 saniye bir gecikme var . Yazı tipi sorunlarının çözülmesi bu gecikmeyi ortadan kaldırdı. Bu yüzden, iki kez kontrol etmenizi öneririz. (rdar: // 20028250) Btw, hatayı yeniden oluşturamadım, ancak sorunun yazı tipinde olduğundan eminim.


1
Sadece bir not. IB'de düzgün yapılandırılmış olsa bile özel fontlar LaunchScreens'de kullanılamaz. Hangisi mantık olabilir.
Rivera

@Rivera vay, harika not! Bunu bilmiyordum. Olası bir alternatif, bunun yerine metinle UIImage kullanmaktır.
Dima Deplov

@Rivera, bu bilgi için teşekkürler- herhangi bir yerde belgelenmiş mi? Bir adımı atladığımı düşünerek art arda adımların üzerinden geçiyordum.
spongessuck

@spongessuck sorunuzdan emin değilsiniz, ancak bazı dokümanlar developer.apple.com/library/ios/documentation/StringsTextFonts/…
Dima Deplov

27

Bunu şöyle yaptım:

Yazı tipini yükleyin:

- (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); 
}

Şimdi, drawRect:böyle bir şey yapın:

-(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]);
}

Temel olarak, yazı tipinde ofsetinizi (burada, 29'u kullanarak görüyorum) bulmak için metinde döngü ve sihirli sayı ile ilgili bazı kaba kuvvet yapmak zorundasınız, ancak işe yarıyor.

Ayrıca, yazı tipinin yasal olarak gömülebilir olduğundan emin olmanız gerekir. Çoğu değil ve bu tür bir konuda uzmanlaşmış avukatlar var, bu yüzden uyarılmalıdır.


1
İyi çalıştığından eminim, ancak (gerçekten gerçekten) UILabel ve UITextView'in şu anda benim için yaptığı her şeyi işlemek için kendi düzen motorumu yazmak istemiyorum - özellikle kelime kaydırma, konumlandırma ve düzenleme.
Airsource Ltd

1
AFAICS, bu yalnızca büyük harf karakterlerle çalışır, dolayısıyla 'uppercaseString' çağrısı.
Martin Cote

2
"Sihirli sayı" hilesi gerçekten işe yaramayan saf bir hack olduğu için aşağı indiriyorum. Gerçek çözüm cmap tablosunu TTF dosyasından almaktır.
Martin Cote

1
Bu, doğrudan Core Graphics ile yazı tiplerini kullanma hakkında düzgün bir bilgi parçasıdır. Sadece gelecekteki okuyucular için güncelleme: Yeni işletim sistemlerinde, Temel Metin kullanılabilir ve kullanılmalıdır. Alternatif olarak, CGContextShowTextAtPoint()UTF-8 ile çalışmasa da kullanılabilir.
Ivan Vučica

20

Evet, özel yazı tipleri ekleyebilirsiniz. UIFont üzerindeki belgelere, özellikle fontWithName:size:yönteme başvurun .

1) Yazı tipini kaynaklar klasörünüze eklediğinizden emin olun.

2) Yazı tipinin "adı" mutlaka dosya adı değildir.

3) Söz konusu yazı tipini kullanmak için yasal hakka sahip olduğunuzdan emin olun. Uygulamanıza ekleyerek, onu da dağıtırsınız ve bunu yapma hakkına sahip olmanız gerekir.


Bu başarıyı gerçekten yaptın mı? Çalışmasını sağlayamıyorum ve googling yalnızca deneyen ve başarısız olan diğer insanları bulur.
Airsource Ltd

Evet. Sahibim. Yine, uygun yazı tipi adını kullandığınızdan emin olun.
Ağustos

1
"Yazı tipinin" adı "mutlaka dosya adı değil" derken ... ... doğru ismi nasıl bulabilirim?
Keith Fitzgerald

7
Evet, bu cevap yanlış. Bunu kutudan çıkaramazsınız.
Jonathan Sterling

iOS 9 güncellemesi, UIFont dokümanları özel yazı tipleri hakkında hiçbir şeyden bahsetmiyor
Cbas

20

Eğer kullanıyorsanız xcode 4.3, eklemek zorunda fontiçin Build Phaseunder Copy Bundle Resourcesgöre, https://stackoverflow.com/users/1292829/arne iplik, içinde Özel Yazı Tipleri Xcode 4.3 . Bu benim için çalıştı, özel yazı tiplerinin uygulamamda çalışması için attığım adımlar şunlardır:

  1. Yazı tipini projenize ekleyin. OTF(Veya TTF) dosyaları oluşturduğum ve xcode'un seçimini kabul ettiğim yeni bir gruba sürükleyip bıraktım copying the files over to the project folder.
  2. Oluşturmak UIAppFontsdizi içindeki öğeler olarak listelenen yazı tipleri ile dizi. Yalnızca, namesuzantı değil (ör. " GothamBold", " GothamBold-Italic").
  3. Ekranın sol tarafındaki project nameen üstteki yolu tıklayın Project Navigator.
  4. Build PhasesXcode ana alanında görünen sekmeye tıklayın .
  5. " Copy Bundle Resources" Bölümünü genişletin ve "+"yazı tipini eklemek için tıklayın .
  6. Üzerine tıkladığınızda açılan dosya gezgininden yazı tipi dosyasını seçin "+".
  7. Yapmanız gereken her yazı tipi için bunu yapın add to the project.

12

İşte adım adım nasıl yapılacağı talimatları. Ek kütüphaneye veya özel kodlamaya gerek yok.

http://shang-liang.com/blog/custom-fonts-in-ios4/

Çoğu zaman sorun yöntemi değil yazı tipi ile ilgilidir. Bunu yapmanın en iyi yolu, verdana veya geogia gibi çalışacak bir yazı tipi kullanmaktır. Ardından istenen yazı tipine geçin. Çalışmazsa, yazı tipi adı doğru olmayabilir veya yazı tipi iyi biçimlendirilmiş bir yazı tipi olmayabilir.


12

Mevcut iOS Uygulamanıza yeni bir yazı tipi eklemek çok kolaydır.

Sadece Kaynak Klasörünüze font.ttf yazı tipini eklemeniz yeterlidir.

Başvurunuzu açın info.plist. "Uygulama tarafından sağlanan fontlar" olarak yeni bir satır ekleyin ve font.ttf olarak font adını yazın.

Ve yazı tipini ayarlarken setFont:"corresponding Font Name"

Yazı tipinizin eklenip eklenmediğini kontrol edebilirsiniz NSArray *check = [UIFont familyNames];.

Uygulamanızın desteklediği tüm yazı tipini döndürür.


11

Buradaki en sevdiğim kısa eğitimlerden birini izlemenizi tavsiye ederim: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ bu bilgilerin geldiği.

Adım 1 - .ttf veya .otf dosyanızı Finder'dan projenize sürükleyin

NOT - Ana uygulama hedefinizde 'Hedeflere ekle' kutusunu tıkladığınızdan emin olun

Yazı tipi dosyalarını projenize sürükleyin ve hedefinize eklemek için tıklayın

Hedefinize eklemek için tıklamayı unuttuysanız, proje hiyerarşinizdeki yazı tipi dosyasını tıklayın ve sağ taraftaki panelde Hedef Üyelik bölümündeki ana uygulama hedefini tıklayın

unuttuysanız uygulama hedefine yazı tipleri nasıl eklenir

Emin yazı olduklarından emin görünmesi uygulama hedef marka bir parçasıdır yapmak için Kopyala Paketi Kaynakları içinde Yapı Faz

yazı tiplerinin uygulama hedefinin bir parçası olup olmadığını görmek için kaynakları kontrol etme

Adım 2 - Yazı tipi dosya adlarını Listenize ekleyin

Git Custom iOS Hedef Özellikleri senin içinde Bilgisi Bölüm ve denilen o bölümdeki öğelere bir anahtarı ekleyin Fonts provided by application(eğer. Siz yazdıktan ve bir dizi olarak kendini kuracak gibi bir seçenek olarak gelip bkz küçük oku tıklayın gerekir dizi öğelerini açmak ve uygulamanızın kullanılabilir olmasını istediğiniz yazı tipi dosyaları olduğunu bildirmek için eklediğiniz .ttf veya .otf dosyalarının adlarını yazmak için

NOT - Uygulamanız bu adımdan hemen sonra kilitleniyorsa, buraya eklediğiniz öğeler için yazımınızı kontrol edin

özel yazı tipleri eklenmiş örnek plist

3. Adım - Yazı tiplerinizin adlarını bulun, böylece onları arayabilirsiniz

Sıklıkla uygulamanız tarafından görülen yazı tipi adı, o yazı tipinin dosya adına dayalı olduğunu düşündüğünüzden farklıdır, bunu kodunuza koyun ve uygulamanızın kodunuzda hangi yazı tipi adını çağırdığını görmek için günlüğe bakın

hızlı

for family: String in UIFont.familyNames(){
  print("\(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== \(names)")
  }
}

Hedef C

for (NSString* family in [UIFont familyNames]){
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family]){
        NSLog(@"  %@", name);
    }
}

Günlüğünüz şöyle görünmelidir:

Yazı tipi adlarını bulmak için günlük arama örneği

4. Adım - 3. Adımdaki adı kullanarak yeni özel yazı tipinizi kullanın

hızlı

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

Hedef C

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];

10

TTF'yi bulucuda bulun ve "Bilgi Al". "Tam ad:" başlığı altında bana daha sonra kullandığım bir ad verdi fontWithName(tam adı kopyalayıp yapıştırdım, bu durumda '.ttf' uzantısı gerekli değildi).


8

Henüz çıkmadı, ancak cocos2d'nin (2d oyun çerçevesi) bir sonraki sürümü, karakter eşlemeleri olarak değişken uzunluklu bitmap yazı tiplerini destekleyecek.

http://code.google.com/p/cocos2d-iphone/issues/detail?id=317

Yazarın bu sürüm için çivilenmiş bir çıkış tarihi yok, ancak önümüzdeki bir iki ay içinde olacağını belirten bir yayın gördüm.


8

Önemli bir uyarı: Tam ad veya Soyadı ile değil, yazı tipiyle ilişkili "PostScript adı" nı kullanmanız gerekir. Bu ad genellikle yazı tipinin normal adından farklı olabilir.


7

bu adımı takip et

1) Yazı tipini projenize kopyalayın

2) .plistdosyanızı kaynak kodu modunda açın ... (Not- Açmayın info.plist)

3) Bundan önce - Yazı tipinize sağ tıklayın ve fontforge veya benzeri bir düzenleyicide açın ve installsisteminizde,install

4) Bunu yazın

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5) Bu kodu class .m

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

Burada lblPoints, UILabel

Bitti !! Yazı tipiniz hala çalışmıyorsa, önce yazı tipi uyumluluğunuzu kontrol edin


1
neden açmıyorsun info.plist?
Raptor

4. noktada Plist'de yokken neden 5. noktada Myraid & Pro arasındaki boşluk?
jayant rawat

@jayantrawat Yazı tipini yükledikten sonra sistemde gösterilen yazı tipi adı ve .plist, [.ttl veya otf] yazı tipi dosyasının adıdır
Kirtikumar A.

@KirtikumarA. evet got it .. app başarıyla uygulandı ..
jayant rawat

Benim çözümüm yardımcı olursa @jayantrawat, diğer kullanıcıların aynı şekilde yardım alabilmesi için cevabın üzerine oy vermenizi talep eder
Kirtikumar A.

6

Belki de yazar, yazı tipine Mac FOND adı vermeyi unuttu ?

  1. Yazı tipini FontForge'da açın, ardından Öğe> Yazı Tipi Bilgisi'ne gidin
  2. FOND adını ayarlayabileceğiniz bir "Mac" Seçeneği vardır.
  3. Dosya> Yazı Tipini Dışa Aktar altında yeni bir ttf oluşturabilirsiniz

Dışa aktarma iletişim kutusundaki "Apple" seçeneğini de deneyebilirsiniz.

YASAL UYARI : Ben bir IPhone geliştiricisi değilim!


6

Bu sayfada iOS 3.1.2'deki çeşitli önerileri deniyorum ve bunlar benim sonuçlarım:

[UIFont fontWithName:size:]FOND adı FontForge kullanılarak ayarlanmış olsa bile, Kaynaklar dizinindeki yazı tipleriyle kullanmak işe yaramaz.

[UIFont fontWithName:size:]fontlar önce GSFontAddFromFile kullanılarak yüklenirse çalışır. Ancak GSFontAddFromFileiOS 3.1.2'nin bir parçası değildir, bu nedenle @ rpetrich tarafından açıklandığı gibi dinamik olarak yüklenmesi gerekir.


5

Yukarı Bak ATSApplicationFontsPath

Yazı tipi dosyalarını uygulama kaynakları klasörünüze eklemenizi sağlayan basit bir plist girişi ve uygulamanızda "sadece çalışır".


Bunu cihazda denedin mi? Sevincim yoktu ve googling, iPhone işletim sistemi için belgelenmiş olmasına rağmen bu plist girişinin iPhone'da desteklenmediğini gösteriyor.
Airsource Ltd

1
Üzgünüz, şu anda yalnızca bir OS X uygulamasında kullanıyorum.
Matt Sephton

5

Bu sayfadaki önerilerin bir kısmını iOS 5'te benim için çalışan bir şeye birleştirdim.

İlk olarak, projenize özel yazı tipini eklemeniz gerekir. Ardından, @iPhoneDev'in tavsiyelerini izlemeniz ve yazı tipini info.plist dosyanıza eklemeniz gerekir.

Bunu yaptıktan sonra, bu işe yarar:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

Ancak, yazı tipinizin Postscript adını bilmeniz gerekir. @Daniel Wood'un tavsiyelerini takip edin ve FontBook'dayken command-i tuşuna basın.

Ardından, özel yazı tipinizin keyfini çıkarın.


5

Önce yazı tipinizi kaynaklarınıza .odt biçiminde ekleyin, bu durumda DINEngschriftStd.otf'yi kullanacağız, daha sonra yazı tipini etikete atamak için bu kodu kullanacağız

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

Yazı tipinizin projeye yüklendiğinden emin olmak için

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

.Plist'de yazı tipini bildirmeniz gerekir. Sadece 'Uygulama tarafından sağlanan yazı tipleri' kaydını ekleyin ve yazı tipi adıyla bir öğe 0 dizesi ekleyin (DINEngschriftStd.otf)


5

İOS 3.2 ve üstü için: Yukarıda belirtilenler tarafından sağlanan yöntemleri kullanın:

  1. XCode'daki projenin Kaynaklar klasörüne yazı tipi dosyanızı (örneğin, Chalkduster.ttf ) ekleyin .
  2. İnfo.plist dosyasını açın ve UIAppFonts adlı yeni bir anahtar ekleyin. Bu anahtarın türü dizi olmalıdır.
  3. Bu diziye uzantı (" Chalkduster.ttf ") dahil olmak üzere özel yazı tipi adınızı ekleyin .
  4. [UIFont fontWithName:@"Real Font Name" size:16]Uygulamanızda kullanın .

AMA "Gerçek Font Adı" her zaman Fontbook'ta gördüğünüz isim değildir. En iyi yol, cihazınıza hangi yazı tiplerini gördüğünü ve tam adlarının ne olduğunu sormaktır.

Ben uifont-name-grabber gönderildi uifont-name-grabber kullanın

İstediğiniz yazı tiplerini xcode projesine bırakın, dosya adını plistine ekleyin ve oluşturduğunuz cihazda çalıştırın, UIFont fontWithName:beklediğiniz adları kullanarak size tam bir yazı tipi listesi e-postayla gönderir.


5

Daha iyi bir çözüm, dosyanıza " Fonts provided by application" yeni bir özellik eklemektir info.plist.

Ardından, özel yazı tipinizi normal gibi kullanabilirsiniz UIFont.


3

İOS 4.1'den başlayarak özel yazı tiplerini kullanmanın yeni bir yolu var. Fontları, uygulamada bulunan dosyalardan, indirilen verilerden veya neye sahip olduğunuzdan dinamik olarak yüklemenizi sağlar. Ayrıca, yazı tiplerini istediğiniz gibi yüklemenize izin verirken, eski yöntem hepsini uygulama başlangıç ​​zamanında yükler, bu da çok fazla yazı tipiniz varsa çok uzun sürebilir.

Yeni yöntem ios-dynamic-font-loading bölümünde açıklanmıştır

Bu CTFontManagerRegisterGraphicsFontişlevi, yazı tipi verilerinizle bir arabellek vererek kullanırsınız . Daha sonra UIFonteski yöntemde olduğu gibi web görünümlerinde de kullanılabilir. İşte bu bağlantıdan örnek kod:

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);

Bu kodu kullandım ama & hata yazı tipi yüklenemedi: İşlem tamamlanamadı. (com.apple.coretext hatası 105 - CGFont '<CGFont (0x14fe7df0): Shruti>')
Hiren

Belgelere göre, 105 numaralı hata kCTFontManagerErrorAlreadyRegistered, "Dosya zaten belirtilen kapsamda kaydedilmiş." developer.apple.com/library/ios/#documentation/Carbon/Reference/…
David M.

3

Swift, kod yolu: (swift 2.0 ile de çalışır)

Projenize gerekli yazı tiplerini ekleyin (tıpkı resim eklemek gibi, sadece Xcode'a sürükleyin), projenize hedeflendiğinden emin olun,
bu yöntemi ekleyin ve özel yazı tipleri yükleyin (önerilir 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: "")
    }

}

Örnek kullanın:

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

Yazı tipini kullanın:

UIFont(name: "My-Font", size: 16.5)

Sadece merak ediyorum, nasıl olur da sadece Info.plist'inize yazı tipini eklemeyeceksiniz, aslında aynı şey için çok daha fazla iş gibi görünüyor.
Stephen Jesse

2

Kaynak klasörüne gerekli "FONT" dosyalarını ekleyebilirsiniz. Sonra Project Info.plistdosyasına gidin ve KEY "Uygulama tarafından sağlanan yazı tipleri" kullanın ve "YAZI TİPİ ADI" olarak değer.

Sonra yöntemi çağırabilirsiniz [UIFont fontwithName:@"FONT NAME" size:12];


1

Her şeyi mümkün kıldım ama yeni yazı tipleri görünmüyor, bu yüzden çözümü buldum:

Fot dosyalarını (otf veya ttf) sürüklerken DONT "Hedeflere ekle" altındaki onay kutusunu işaretlemeyi unutmayın.

Bunu yaptıktan sonra yazı tipiniz görünecek ve her şey düzgün çalışacaktır.


1

Yukarıdaki cevapların bazıları doğru olmasına rağmen, hala yazı tipleriyle ilgili sorunları olan insanlar için ayrıntılı bir görsel eğitim yazdım.

Yukarıda plist'e yazı tipi eklemenizi ve kullanmanızı söyleyen çözümler

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

doğru olanlardır. Lütfen şimdi başka bir hackish yolu kullanın. Yazı tipi adlarını bulma ve ekleme konusunda hala sorun yaşıyorsanız, işte öğretici -

İOS uygulamasında özel yazı tiplerini kullanma


Sadece denedim. Çalışıyor gibi görünüyor, ancak yazı tipimi küçültüyor, hangi boyutta olursa olsun. Değer için, serbestçe kullanılabilir bir OTF dosyası kullanıyorum: philsfonts.com/index.php/free_fonts
ari gold

Başka bir özel yazı tipiyle deneyin ve sorun devam ederse bana bildirin. Bu şekilde çalışırsa, yazı tipinizle ilgili bir sorun vardır.
Bharat Gulati

1

evet uygulamanızda özel yazı tipi kullanabilirsiniz

orada adım adım takip:

Özel yazı tipi dosyalarınızı destek dosyalarında projenize ekleyin

Info.plist dosyanıza UIAppFonts adlı bir anahtar ekleyin.

Bu anahtarı bir dizi yap

Sahip olduğunuz her yazı tipi için UIAppFonts dizisine öğe olarak yazı tipi dosyanızın tam adını (uzantı dahil) girin

Info.plist'i kaydet Şimdi uygulamanızda doğru yazı tipini almıyorsanız UILabels ile kullanmak için özel yazı tipini almak için [UIFont fontWithName: @ "Özel yazı tipi Adı" boyutu: 20] 'yi arayabilirsiniz. özel yazı tipinde ve dikkatlice bakın üst taraf yazı tipi adı geliyor ve bu yazı tipini kopyalayın, yapıştırın, buraya [UIFont fontWithName: @ "burada Özel yazı tipi Adınızı geçti" boyutu: 20]

umarım doğru cevabı alırsın


1

evet uygulamanızda özel yazı tipi kullanabilirsiniz

orada adım adım takip:

  • Özel yazı tipi dosyalarınızı destek dosyalarında projenize ekleyin
  • Info.plistDosyanıza UIAppFonts adlı bir anahtar ekleyin.
  • Bu anahtarı bir dizi yap
  • Sahip olduğunuz her yazı tipi için UIAppFonts dizisine öğe olarak yazı tipi dosyanızın tam adını (uzantı dahil) girin
  • Info.plist Şimdi Kaydet Uygulamanızda [UIFont fontWithName:@"your Custom font Name" size:20]kullanmak için özel yazı tipini almak için arayabilirsinizUILabels

doğru yazı tipini almıyorsanız bunu uyguladıktan sonra özel yazı tipine çift tıklayın ve üst taraf yazı tipi adının dikkatlice görüp bu yazı tipini kopyalayıp yapıştırın, burada [UIFont fontWithName:@" here past your Custom font Name" size:20] umarım doğru cevap alırsınız

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.