İOS 7'de özel yazı tipleri


102

Bir oyun geliştiriyorum ve uygulamamda özel bir yazı tipi kullanmak istiyorum. Bunun için SpriteKit kullanıyorum, önemliyse. Bu https://github.com/deni2s/IBCustomFonts'u kullanmayı denedim ama bu yazı tipiyle çalışmasını sağlayamıyorum http://www.fontspace.com/freaky-fonts/emulogic

Çeşitli şeyler denedim ve yazı tipini uygulamanın info.plist'ine kaydettim ... Neler olduğunu bilen var mı?


Kodunuzda kullanırken yazı tipi için doğru adı kullandığınızdan emin misiniz?
Nick

1
bu blog sizin için yararlı olabilir codewithchris.com/…
Xu Yin

Yanıtlar:


277

Öncelikle SpriteKit'in herhangi bir fark yaratmadığını varsayıyorum.

  1. Yazı tipinizin .otf veya .ttf biçiminde projenize kopyalanması gerekir. Örneğin Supporting Files'da.
  2. .Plist dosyasını düzenlemeniz gerekiyor . Ekle "uygulaması tarafından sağlanan yazı tipleri" senin plist içine ve anahtarın Madde 0 uzantı İLE sizin Destekleyici dosyalara kopyalanan yazı tam dosya adını kopyalayın. Örneğin: "JosefinSansStd-Light_0.otf"
  3. Uygulamanıza aktardığınız yazı tipinin uygulamanın kendisinde paketlendiğinden emin olun. Bunu Hedefinizi seçerek yapın , ardından Aşamaları Oluşturun , ardından Paket Kaynaklarını Kopyalayın . Yazı tipinizi orada görmüyorsanız, Destekleyici Dosyalar'dan sürükleyin .

Son olarak, uygulama yalnızca yazı tipiniz için kullanılabilir bir ad görmek için başladığında tüm yazı tiplerinizi listelemek istersiniz. Bunu bu küçük kod parçasıyla yapacaksın:

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

Yazı tipinizi basılı sonuçlarda arayın, örneğin "Josefin" için arama yapardım ve gerçek yazı tipi adının "JosefinSansStd-Light" olduğunu görürdüm. Bundan sonra, bu yazı tipini yalnızca şu şekilde kullanmanız gerekir:

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

İOS8'de fontlarınızı doğrudan projeye eklersiniz ve bunlar arayüz oluşturucuda görülebilir. Kodunuzu bunu hesaba katacak şekilde değiştirin, ancak iOS7 için programlı olarak yazı tipini ayarlayın ve xCode6 arabirim oluşturucusunda seçin. PS. XCode6'daki arayüz oluşturucu, aşağıdaki koda kopyalayıp yapıştırabileceğiniz doğru yazı tipi adını verir.

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

Umarım bu yardımcı olur, şerefe.


Teşekkürler! Anladım! Sorun şu ki, onu Destekleyici Dosyalara eklemeyecektim, bu yüzden yüklenmiyordu: P
José María

1
Plist anahtarını kullanmak zorunda kaldımUIAppFonts
Mike Flynn

1
Uygulamamı, tüm projeyi iOS7 / Xcode 5.1.1'den bir iOS8 / Xcode 6.0 projesine yeniden oluşturdum. 2. adımı gerçekleştirene kadar özel yazı tipi gösterilmiyordu. Gr8 açıklaması!
MB_iOSDeveloper

1
let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Swift'de

1
Tüm yazı tipi adlarını yazdırmak için bazı hızlı kodlar:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete

24

Özel yazı tiplerini kullanmak sorun değil, ben yaptım. Bu adımları takip et:

  1. Yazı tipini info.plist'inize "Uygulama tarafından sağlanan yazı tipleri" girişini ekleyerek kaydedin. Yazı tipi adını değil yazı tipi dosya adını girin. Font.ttf gibi (bunu zaten yaptığını düşünüyorum)
  2. Proje gezgininde projenize gidin, proje adına tıklayın ve "inşa aşamaları" na gidin, ardından "Paket Kaynaklarını Kopyala" altında aşağıya bakın, çok sayıda dosya var ve "+" işaretini arayın. Proje dosyalarınızı içeren bir açılır pencere açılacaktır. Yazı tipi dosyanızı arayın ve pakete ekleyin.
  3. Son olarak yazı tipi adını kontrol edin. Kodunuzda kullandığınızda, dosya adını değil yazı tipi adını kullanmanız gerekir. Yazı tipi adını öğrenmek için, Finder'daki yazı tipi dosyasına çift tıklayın ve yazı tipini gösteren bir pencere açılacaktır. Şu pencere başlığını kontrol edin, bu, kullanmanız gereken yazı tipinin adıdır.

Ve tavsiye, bu adı ..Prefix.pch dosyanıza makro olarak ekleyin. Yazı tipini birden çok kez kullanmanız gerekiyorsa, projenizde kullanmak daha kolay olacaktır.

Sahip olduğunuzu düşündüğüm sorun, yazı tipini doğru bir şekilde kaydetmiş olmanız ancak uygulama paketine kopyalanmamış olmasıdır. Yani uygulama çalıştırıldığında yazı tipini bulamadı. Bu yüzden 2. adım önemlidir. İlk seferinde bunu anlamaya çalışırken çok zaman harcadım :)


2
Benim için anahtar yazı tipinin başlığıydı. Teşekkürler!
Oscar

20

Bunu hızlı bir şekilde başarmak için

Uygulama başladığında tüm yazı tiplerinizi listelemek istiyorsanız, sadece yazı tipiniz için kullanılabilir adı görmek için. Bunu şu küçük kod parçasıyla yapabilirsiniz:

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }

veya ileUIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
Daniel

5

Birden çok kez denediğim için bu cevapları işe yarayabilmek için asla alamadım. Kabul edilen cevaptaki talimatı takip etmek için özel bir yazı tipine sahip olmamın tek yolu, ardından hikaye tahtasında yazı tipini kullanan gizli bir etiket oluşturmak. Yazı tipini programlı olarak kullanabilirim. Garip ve hileli biliyorum ama benim için çalıştı.


1
tam olarak haklısın. Plist dahil olmak üzere birçok öğreticide her şeye baktım, projeyi hedeflemek için onay işareti, aşamaları inşa ettim ve sonunda doğru yazı tipi ailesi adını buldum, ancak yine de işe yaramayacaktı. Sonra söylediğiniz gibi gizli bir etiket ekledim ve sonunda ortaya çıktı. Xcode 7.2 kullanıyorum ve bu bir hata olmalı.
DrZ214

3

Xcode 6'daysanız, olabildiğince kolaydır. Sadece fontprojenize bir klasör ekleyin, yazı tiplerinizi klasöre ekleyin ve gitmeniz iyi olur.

görüntü açıklamasını buraya girin


7
Onu da amaçladığınız hedefe eklediğinizden emin olun. Sinsi hobbit Xcode.
Matt Parkins

3

Yukarıdaki yöntemlerden hiçbiri sizin için işe yaramadıysa VE özel yazı tipinizi yalnızca "programatik olarak" kullanıyorsanız (yani, onu herhangi bir xib'de kullanmadıysanız), en az bir kez bir xib'de, herhangi bir yerde kullanmanız gerekecektir. .

(PS Stuart Clark - bunu zaten cevapladı, bu yüzden lütfen bana itibar etmeyin. Ancak, cevabını kaçırdığım için yeniden ifade etmeye ve ayrı bir cevap olarak göndermeye karar verdim, okuduğumda benim için net değildi. Bir xib'de özel yazı tipini test ederken şans eseri bu çözümü çözdüm ve programatik olarak başka bir yerde çalıştığını gördüm, ancak yazı tipini xib'den kaldırdığımda programatik olarak çalışmayı durdurdu.)


2

Swift 3 için güncellendi.

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}

0

Belki hızlı bir düzeltme - bu, yazı tipi zaten çalıştığında benim için yaptı, ancak yeni bir örn. Etiket istenen yazı tipini göstermedi:

temiz, derinlemesine temiz ve boş türetilmiş veri klasörü.


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