Font khusus di iOS 7


102

Saya sedang mengembangkan game dan saya ingin menggunakan font khusus di aplikasi saya. Saya menggunakan SpriteKit untuk itu, jika itu penting. Saya sudah mencoba menggunakan https://github.com/deni2s/IBCustomFonts ini tetapi saya tidak bisa membuatnya berfungsi dengan font ini http://www.fontspace.com/freaky-fonts/emulogic

Saya sudah mencoba berbagai hal, dan saya telah mendaftarkan font di info.plist aplikasi ... Adakah yang tahu apa yang terjadi?


Apakah Anda yakin Anda menggunakan nama yang benar untuk font tersebut saat menggunakannya dalam kode Anda?
Nick

1
blog ini mungkin berguna untuk Anda codewithchris.com/…
Xu Yin

Jawaban:


277

Pertama-tama saya berasumsi bahwa SpriteKit tidak ada bedanya.

  1. Anda perlu menyalin font dalam .otf atau .ttf ke proyek Anda. Misalnya di Mendukung File.
  2. Anda perlu mengedit file .plist . Tambahkan "Font disediakan oleh aplikasi" kunci ke dalam plist Anda dan di Item 0 salin nama file yang tepat dari font yang Anda salin ke file Pendukung DENGAN ekstensi. Misalnya: "JosefinSansStd-Light_0.otf"
  3. Pastikan font yang Anda impor ke aplikasi Anda dikemas ke dalam aplikasi itu sendiri. Lakukan itu dengan memilih Target Anda , lalu Build Phases , lalu Copy Bundle Resources . Jika Anda tidak melihat font Anda di sana, seret dari File Pendukung .

Terakhir, Anda ingin mencantumkan semua font Anda saat aplikasi dimulai hanya untuk melihat nama yang dapat digunakan untuk font Anda. Anda akan melakukannya dengan potongan kode kecil ini:

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

Cari font Anda di hasil cetakan, misalnya, saya akan mencari "Josefin" dan saya akan melihat bahwa nama font yang sebenarnya adalah "JosefinSansStd-Light". Setelah itu Anda hanya perlu menggunakan font tersebut dengan cara:

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

Di iOS8 Anda menambahkan font Anda langsung ke proyek dan mereka terlihat di pembuat antarmuka. Ubah kode Anda untuk memperhitungkan ini tetapi secara terprogram mengatur font untuk iOS7 dan memilihnya di pembuat antarmuka xCode6. PS. Pembuat antarmuka di xCode6 memberi Anda nama font yang benar yang dapat Anda salin-tempel ke kode di bawah ini.

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

Semoga ini bisa membantu, selamat.


Terima kasih! Saya mendapatkannya! Masalahnya adalah saya tidak ingin menambahkannya ke File Pendukung, jadi tidak dimuat: P
José María

1
Saya harus menggunakan kunci plistUIAppFonts
Mike Flynn

1
Saya membuat ulang aplikasi saya, seluruh proyek dari iOS7 / Xcode 5.1.1 menjadi proyek iOS8 / Xcode 6.0. Font kustom tidak muncul sampai saya melakukan 2. langkah. Penjelasan Gr8!
MB_iOSDeveloper

1
Kode yang sama untuk mendapatkan nama font di Swift: let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Alexander Bekert

1
Beberapa kode cepat untuk mencetak semua nama font:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete

24

Tidak masalah untuk menggunakan font khusus, saya berhasil. Ikuti langkah ini:

  1. Daftarkan font di info.plist Anda dengan menambahkan entri "Font disediakan oleh aplikasi". Masukkan nama file font, bukan nama font. Seperti font.ttf (Saya pikir Anda sudah melakukannya)
  2. Pergi ke proyek Anda pada navigator proyek, klik pada nama proyek dan pergi ke "fase pembangunan" kemudian lihat ke bawah di "Salin Sumber Daya Bundel" ke bawah, ada banyak file dan cari tanda "+". Jendela popup akan terbuka dengan file proyek Anda. Cari file font Anda dan tambahkan ke bundel.
  3. Terakhir, periksa nama font. Saat Anda menggunakannya dalam kode Anda, Anda harus menggunakan nama font, bukan nama file. Untuk mengetahui nama font, klik dua kali pada file font di Finder dan sebuah jendela akan terbuka menampilkan font tersebut. Periksa judul jendela itu, itulah nama font yang harus Anda gunakan.

Dan saran, tambahkan nama itu sebagai makro di file ..Prefix.pch Anda. Akan lebih mudah untuk menggunakannya dalam proyek Anda jika Anda harus menggunakan font beberapa kali.

Masalah yang menurut saya Anda miliki adalah Anda mendaftarkan font dengan benar tetapi tidak disalin ke app bundle. Jadi ketika aplikasi dijalankan, ia tidak dapat menemukan fontnya. Itulah mengapa langkah 2 penting. Saya menghabiskan banyak waktu mencoba mencari tahu pertama kali :)


2
Kuncinya bagi saya adalah judul font. Terima kasih!
Oscar

20

Untuk mencapai ini dengan cepat

Jika Anda ingin membuat daftar semua font Anda saat aplikasi dimulai hanya untuk melihat nama yang dapat digunakan untuk font Anda. Anda dapat melakukannya dengan potongan kode kecil ini:

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

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

5

Saya tidak pernah bisa mendapatkan jawaban ini untuk bekerja setelah mencoba berkali-kali. Satu-satunya cara saya mendapatkan font khusus di dalamnya untuk mengikuti instruksi dalam jawaban yang diterima kemudian membuat label tersembunyi di papan cerita yang menggunakan font tersebut. Saya dapat menggunakan font secara terprogram. Aneh dan hacky saya tahu tetapi itu berhasil untuk saya.


1
Anda benar. Saya melihat semuanya di banyak tutorial, termasuk plist, tanda centang untuk target proyek, fase pembuatan, dan akhirnya menemukan nama keluarga font yang benar, tetapi tetap tidak berhasil. Lalu saya menambahkan label tersembunyi seperti yang Anda katakan dan akhirnya label itu muncul. Saya menggunakan Xcode 7.2 dan itu pasti bug.
DrZ214

3

Jika Anda menggunakan Xcode 6, itu semudah yang didapat. Cukup tambahkan fontfolder ke dalam proyek Anda, tambahkan font Anda ke dalam folder, dan Anda siap melakukannya.

masukkan deskripsi gambar di sini


7
Pastikan Anda menambahkannya ke target yang Anda maksud juga. Xcode hobbit licik.
Matt Parkins

3

Jika tidak ada metode di atas yang berhasil untuk Anda, DAN Anda kebetulan hanya menggunakan font khusus "secara programatik" (yaitu, Anda tidak menggunakannya di xib mana pun) maka Anda perlu menggunakannya setidaknya sekali di suatu tempat dalam satu xib, di mana saja .

(PS Stuart Clark - sudah menjawab ini, jadi tidak ada kredit untuk saya. Namun, saya memutuskan untuk mengubah kalimat dan mempostingnya sebagai jawaban terpisah, karena saya melewatkan jawabannya, tidak jelas bagi saya ketika saya membacanya. Saya menemukan keluar solusi ini secara kebetulan ketika saya menguji font khusus di xib, dan saya melihat bahwa itu berfungsi di tempat lain secara terprogram, tetapi ketika saya menghapus font dari xib, itu berhenti bekerja secara terprogram.)


2

Diperbarui untuk Swift 3.

let fontFamilies:[String] = UIFont.familyNames

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

0

Mungkin perbaikan cepat - ini berhasil untuk saya ketika font sudah berfungsi, tetapi misalnya Label baru tidak menunjukkan font yang diinginkan:

folder data turunan yang bersih, bersih dalam dan kosong.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.