Bisakah saya menyematkan font khusus di aplikasi iPhone?

772

Saya ingin memiliki aplikasi menyertakan font khusus untuk rendering teks, memuatnya, dan kemudian menggunakannya dengan UIKitelemen standar seperti UILabel. Apakah ini mungkin?

Airsource Ltd
sumber
5
Dalam salah satu ceramah CS193p (Pengembangan Aplikasi iPhone) di Stanford, Evan mencatat bahwa memasang font Anda sendiri di perangkat adalah "banyak pekerjaan", yang setidaknya berarti mungkin :-)
Ilya Birman
2
iPhone 3.2 memungkinkan font khusus, tetapi hanya iPad (lihat jawaban di bawah)
samvermette
6
Saya menggunakan gambar pada akhirnya.
Airsource Ltd
2
wow ... setelah semua itu, jawabannya tetap gambar ... luar biasa. Saya benar-benar berharap untuk implementasi font kustom dengan kemampuan yang sama seperti font sistem. sayangnya ...
d2burke
1
Saya secara substansial telah memangkas pertanyaan awal untuk mencerminkan dekade yang telah berlalu sejak saya menanyakannya. Saya mendorong semua orang untuk memotong komentar dan jawaban mereka dengan tepat.
Airsource Ltd

Jawaban:

646

iOS 3.2 dan yang lebih baru mendukung ini. Langsung dari Apa yang Baru di iPhone OS 3.2 doc:

Dukungan Font Kustom
Aplikasi yang ingin menggunakan font khusus sekarang dapat menyertakan font-font itu dalam bundel aplikasi mereka dan mendaftarkan font-font itu dengan sistem dengan memasukkan kunci UIAppFonts dalam file Info.plist mereka. Nilai kunci ini adalah larik string yang mengidentifikasi file font dalam bundel aplikasi. Ketika sistem melihat kunci, itu memuat font yang ditentukan dan membuatnya tersedia untuk aplikasi.

Setelah font telah diatur dalam Info.plist, Anda dapat menggunakan font khusus Anda seperti font lain di IB atau secara terprogram.

Ada utas yang sedang berlangsung di Forum Pengembang Apple:
https://devforums.apple.com/thread/37824 (diperlukan login)

Dan inilah tutorial 3 langkah yang sangat bagus dan sederhana tentang cara mencapai ini (tautan rusak dihapus)

  1. Tambahkan file font khusus Anda ke proyek Anda menggunakan Xcode sebagai sumber daya
  2. Tambahkan kunci ke Info.plistfile Anda yang disebut UIAppFonts.
  3. Jadikan kunci ini sebagai array
  4. Untuk setiap font yang Anda miliki, masukkan nama lengkap file font Anda (termasuk ekstensi) sebagai item ke UIAppFontsarray
  5. Menyimpan Info.plist
  6. Sekarang dalam aplikasi Anda, Anda dapat menelepon [UIFont fontWithName:@"CustomFontName" size:12]untuk mendapatkan font khusus untuk digunakan dengan UILabel dan UITextViews Anda , dll ...

Juga: Pastikan font ada di Sumber Bundel Salin Anda.

samvermette
sumber
14
Berikut ini adalah tutorial langkah demi langkah untuk iOS4: blog.beefyapps.com/2010/06/custom-fonts-in-ios-4
pm_labs
15
Tutorial ini sangat bagus. shang-liang.com/blog/custom-fonts-in-ios4 Yang penting, argumen NSString ke [UIFont fontWithName: ...] adalah nama OS untuk font daripada nama file.
Willster
152
Sebelum orang lain menghabiskan 3 jam menginstal fontforge untuk menemukan nama postscript sebenarnya dari font yang diperlukan oleh iOS. Saya akan menunjukkan bahwa Anda cukup menekan Cmd + I pada font di font book untuk menemukan informasi ini.
Daniel Wood
42
Setelah berjuang untuk mendapatkan nama font yang tepat, saya baru saja mencantumkan font yang diinstal dan menemukannya. Sangat membantu. Berikut kode: untuk (NSString * familyName di [UIFont familyNames]) {NSLog (@ "Family% @", familyName); NSLog (@ "Names =% @", [UIFont fontNamesForFamilyName: familyName]); }
Steve Potter
26
Jika kode Anda tidak berfungsi, pastikan Anda menemukan file font muncul di "Build Phases" -> "Copy Bundle Resouces"
Mickey
299

Sunting: Pada iOS 3.2, fungsi ini sudah ada di dalam. Jika Anda perlu mendukung pra-3.2, Anda masih dapat menggunakan solusi ini.

Saya membuat modul sederhana yang memperluas UILabeldan menangani memuat file .ttf. Saya merilisnya opensource di bawah lisensi Apache dan meletakkannya di github Here.

File-file penting adalah FontLabel.hdan FontLabel.m.

Ini menggunakan beberapa kode dari jawaban Genericrich .

Jelajahi sumbernya di sini.

ATAU

  • Salin file font Anda ke sumber daya

  • Tambahkan kunci ke Info.plistfile Anda yang disebut UIAppFonts. ("Font disediakan oleh aplikasi)

  • Jadikan kunci ini sebagai array

  • Untuk setiap font yang Anda miliki, masukkan nama lengkap file font Anda (termasuk ekstensi) sebagai item ke array UIAppFonts

  • Menyimpan Info.plist

  • Sekarang dalam aplikasi Anda, Anda dapat menelepon [UIFont fontWithName:@"CustomFontName" size:15]untuk mendapatkan font khusus untuk digunakan dengan UILabelsdan UITextViews, dll ...

Untuk informasi lebih lanjut

komanda
sumber
2
Saya sudah mencoba menggunakan kode Anda tetapi sering crash tergantung pada font. Misalnya, coba gunakan font Afrika atau Tiki dari sini fontspace.com/category/tiki .
4thSpace
2
Perpustakaan ini berfungsi dengan baik. Saya butuh bantuan dengan jarak vertikal. Tidak tahu bagaimana cara melakukannya. Jadi saya punya pesan ini.numberOfLines = 3; Bagaimana cara mengontrol jarak vertikal antara garis 1, dan garis 2 dan garis 3? Terima kasih, Tee
teepusink
2
@commanda Halo commanda, tautan yang Anda berikan di jawaban Anda tampaknya tidak tersedia.
Parth Bhatt
5
@ParthBhatt Anda harus menggunakan solusi yang disediakan di stackoverflow.com/a/2616101/21447 alih-alih FontLabel, karena fungsi ini sekarang disediakan oleh CocoaTouch.
commanda
2
@ParthBhatt: Saya tidak tahu mengapa repo tidak lagi dihosting di zynga, tetapi tersedia di github.com/kballard/fontlabel
Lily Ballard
116

Ada cara sederhana untuk menggunakan font khusus di iOS 4 .

  1. Tambahkan file font Anda (misalnya, Chalkduster.ttf) ke folder Resources proyek di XCode.
  2. Buka info.plistdan tambahkan kunci baru yang disebut UIAppFonts. Jenis kunci ini harus berupa array.
  3. Tambahkan nama font khusus Anda ke array ini termasuk ekstensi ( Chalkduster.ttf).
  4. Sekarang Anda dapat menggunakan [UIFont fontWithName:@"Chalkduster" size:16]aplikasi Anda.

Sayangnya, IB tidak mengizinkan untuk menginisialisasi label dengan font khusus. Lihat pertanyaan ini untuk menyelesaikan masalah ini. Solusi favorit saya adalah menggunakan UILabelsubkelas khusus :

@implementation CustomFontLabel

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

@end
alexey
sumber
3
Ini tampaknya didukung kembali ke 3,2, bukan hanya 4.0+
Jesse Rusak
1
Terima kasih! Masalah yang saya alami adalah bahwa font khusus tampaknya condong agak tinggi (ruang ekstra di bawah) vs rekan bawaan mereka. Saya sudah mencoba menggunakan repo FontLabel dari GitHub, yang membantu beberapa saat, tetapi tidak selalu.
Joe D'Andrea
12
Perlu dicatat bahwa string yang Anda berikan ke konstruktor UIFont BUKAN nama file dikurangi ekstensi itu adalah nama internal font. Saya mengalami masalah memuat font dengan nama file yang saya persingkat. Ketika saya menggunakan seluruh nama font seperti yang terdapat DI file font dimuat dengan baik.
slayton
5
Apa yang dikatakan slayton sangat penting. [UIFont fontWithName: mengharapkan "Nama lengkap" font, yang dapat dilihat dengan membukanya di Font Book dan memilih: Pratinjau -> Tampilkan Info Huruf
electromaggot
51

Di Info.plist tambahkan entri "Font yang disediakan oleh aplikasi" dan sertakan nama font sebagai string:

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

Kemudian periksa untuk memastikan font Anda disertakan dengan menjalankan:

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

Perhatikan bahwa nama file ttf Anda mungkin bukan nama yang sama yang Anda gunakan ketika Anda mengatur font untuk label Anda (Anda dapat menggunakan kode di atas untuk mendapatkan parameter "fontWithName"):

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

sunting: Jawaban ini tidak aktif pada iOS3.2; gunakan UIAppFonts

Satu-satunya cara saya berhasil memuat kustom UIFontadalah melalui kerangka kerja GraphicsServices pribadi.

Berikut ini akan memuat semua .ttffont dalam bundel utama aplikasi:

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

Setelah font dimuat, mereka dapat digunakan seperti font yang disediakan Apple:

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

GraphicsServices bahkan dapat dimuat saat runtime jika API menghilang di masa depan:

#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;
}
rpetrich
sumber
perhatikan bagi mereka yang bertanya-tanya, ini berfungsi, tetapi Anda harus memanggil loadFonts tepat sebelum menggunakan font - mereka tampaknya tidak tetap dimuat di seluruh aplikasi
pixel
Di OS 3.0 Anda harus menggunakan contoh kedua kedua, jangan lupa impor. Bekerja dengan baik untuk saya.
M. Ryan
Catatan lain - ini adalah kerangka kerja pribadi, dan memuatnya secara dinamis ... yang keduanya kemungkinan akan menghentikan penerimaan aplikasi Anda ke AppStore.
pixel
Apa kesimpulannya? Apa alternatif untuk metode ini?
Raj Pawan Gumdal
1
Ia juga harus mencatat bahwa [NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];mengembalikan 0 lebar dan tinggi untuk font kustom apa pun yang telah saya coba.
Luke Mcneice
34

Dengan iOS 8+ dan Xcode 6+ Anda dapat membuatnya dengan mudah. Berikut langkah-langkahnya:

1) Seret dan lepas font Anda ke Xcodefolder File Pendukung. Jangan lupa untuk menandai aplikasi Anda di bagian Tambahkan ke target . Mulai saat ini Anda dapat menggunakan font ini IBdan memilihnya dari font palet.

masukkan deskripsi gambar di sini

2) Untuk membuat font ini tersedia di perangkat Anda, buka info.plistdan tambahkan Fonts provided by applicationkunci Anda. Ini akan berisi kunci Item 0, Anda harus menambahkan nama font Anda sebagai nilainya. Nama font dapat bervariasi dari nama file font Anda. Tetapi pertama-tama, cobalah untuk menambahkan nama file Anda dalam banyak kasus pekerjaan ini.

masukkan deskripsi gambar di sini

Jika tidak, artikel ini selalu membantu saya.

Berikut ini cuplikan singkat kode dari artikel ini untuk membantu Anda menemukan nama font Anda.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


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

   }

}

EDIT

Saya ingin menyebutkan, bahwa Anda perlu menambahkan file font ke Fase Build Target Anda , Salin Sumber Daya Bundel . Tanpa itu, Anda tidak akan melihat font Anda di perangkat. Dan itu bisa mengarah pada perilaku tak terduga.

Sebagai contoh, saya menemukan bug, ketika UITextFieldmemiliki font khusus, tetapi font ini tidak ada dalam Salin Bundle Resources . Dan ketika saya segue viewcontrollerdengan ini textfield, ada penundaan sekitar 4 detik sebelum viewDidLoadfungsi dipanggil. Menyelesaikan masalah font menghapus penundaan ini. Jadi, rekomendasikan untuk memeriksanya dua kali. (rdar: // 20028250) Btw, saya tidak dapat mereproduksi bug, tapi saya yakin masalahnya ada pada font.

Dima Deplov
sumber
1
Hanya sebuah catatan. Font khusus tidak tersedia di LaunchScreens bahkan jika dikonfigurasi dengan benar di IB. Yang mungkin logis.
Rivera
@Rivera wow, catatan bagus! Tidak tahu itu. Alternatif yang mungkin adalah menggunakan UIImage dengan teks saja, saya pikir.
Dima Deplov
@Rivera, terima kasih untuk info- apakah ini didokumentasikan di mana saja? Saya mengulangi langkah-langkah berulang kali dengan berpikir saya melewatkan satu langkah.
spongessuck
@spongessuck tidak yakin tentang pertanyaan Anda, tetapi ada beberapa pengembang
doc.apple.com/library/ios/documentation/StringsTextFonts/…
27

Saya telah melakukan ini seperti ini:

Muat font:

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

Sekarang, di Anda drawRect:, lakukan sesuatu seperti ini:

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

Pada dasarnya Anda harus melakukan beberapa brute force melalui teks dan mencari-cari nomor ajaib untuk menemukan offset Anda (di sini, lihat saya menggunakan 29) di font, tetapi berfungsi.

Anda juga harus memastikan font tersebut dapat disematkan secara hukum. Kebanyakan tidak dan ada pengacara yang berspesialisasi dalam hal semacam ini, jadi berhati-hatilah.

Genericrich
sumber
1
Saya yakin itu bekerja dengan baik, tetapi saya (benar-benar sangat) tidak ingin menulis mesin tata letak saya sendiri untuk menangani semua yang UILabel dan UITextView saat ini lakukan untuk saya - terutama pembungkusan kata, penentuan posisi, dan pengeditan.
Airsource Ltd
1
AFAICS, ini hanya bekerja dengan karakter huruf besar, maka panggilan 'huruf besar'.
Martin Cote
2
Saya downvoting karena trik "angka ajaib" adalah hack murni yang tidak benar-benar berfungsi. Solusi sebenarnya adalah untuk mendapatkan tabel cmap dari file TTF.
Martin Cote
1
Ini adalah informasi yang rapi tentang penggunaan font secara langsung dengan Core Graphics. Hanya untuk memperbarui bagi pembaca di masa mendatang: Di OS yang lebih baru, orang dapat dan harus menggunakan Teks Inti. Atau, orang dapat menggunakan CGContextShowTextAtPoint()- meskipun tidak bekerja dengan UTF-8.
Ivan Vučica
20

Ya, Anda dapat memasukkan font khusus. Lihat dokumentasi pada UIFont, khususnya, fontWithName:size:metode ini.

1) Pastikan Anda memasukkan font di folder sumber daya Anda.

2) "nama" font belum tentu nama file.

3) Pastikan Anda memiliki hak hukum untuk menggunakan font itu. Dengan memasukkannya ke dalam aplikasi Anda, Anda juga mendistribusikannya, dan Anda harus memiliki hak untuk melakukannya.

Agustus
sumber
Apakah Anda benar-benar melakukan ini dengan sukses? Saya tidak dapat membuatnya berfungsi, dan googling hanya menemukan orang lain yang telah mencobanya dan gagal.
Airsource Ltd
Iya. Saya sudah. Sekali lagi, pastikan Anda menggunakan nama font yang tepat.
Agustus
1
Ketika Anda mengatakan "Nama" font tidak harus nama file "... bagaimana menemukan nama yang benar?
Keith Fitzgerald
7
Ya, jawaban ini salah. Anda tidak dapat melakukan ini di luar kotak.
Jonathan Sterling
Pembaruan iOS 9, dokumen UIFont tidak menyebutkan apa pun tentang font khusus
Cbas
20

Jika Anda menggunakan xcode 4.3, Anda harus menambahkan fontke Build Phasebawah Copy Bundle Resources, menurut https://stackoverflow.com/users/1292829/arne di utas, Custom Fonts Xcode 4.3 . Ini berhasil bagi saya, berikut adalah langkah-langkah yang saya ambil agar font khusus berfungsi di aplikasi saya:

  1. Tambahkan font ke proyek Anda. Saya menyeret dan menjatuhkan file OTF(atau TTF) ke grup baru yang saya buat dan menerima pilihan xcode untuk copying the files over to the project folder.
  2. Buat UIAppFontsarray dengan font Anda terdaftar sebagai item dalam array. Hanya names, bukan ekstensi (mis. " GothamBold", " GothamBold-Italic").
  3. Klik di project namejalan di bagian atasProject Navigator di sisi kiri layar.
  4. Klik pada Build Phasestab yang muncul di area utama xcode.
  5. Buka bagian " Copy Bundle Resources" dan klik "+"untuk menambahkan font.
  6. Pilih file font dari navigator file yang muncul terbuka ketika Anda mengklik "+".
  7. Lakukan ini untuk setiap font yang Anda harus add to the project.
SKris
sumber
12

Inilah petunjuk langkah demi langkah cara melakukannya. Tidak perlu perpustakaan tambahan atau pengkodean khusus.

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

Sebagian besar masalah adalah font bukan metode. Cara terbaik untuk melakukannya adalah dengan menggunakan font yang pasti akan berfungsi, seperti verdana atau geogia. Kemudian ubah ke font yang dimaksud. Jika tidak berfungsi, mungkin nama fontnya tidak benar, atau fontnya bukan font yang diformat dengan baik.

5566
sumber
12

Sangat mudah untuk menambahkan font baru di Aplikasi iOS Anda yang sudah ada.

Anda hanya perlu menambahkan font mis. Font.ttf ke dalam Resource Folder Anda.

Buka aplikasi Anda info.plist. Tambahkan baris baru sebagai "Font yang disediakan oleh aplikasi" dan ketikkan nama font sebagai font.ttf.

Dan ketika mengatur font lakukan sebagai setFont:"corresponding Font Name"

Anda dapat memeriksa apakah font Anda ditambahkan atau tidak oleh NSArray *check = [UIFont familyNames]; .

Ini mengembalikan semua font yang didukung aplikasi Anda.

kumar123
sumber
11

Saya akan merekomendasikan mengikuti salah satu tutorial singkat favorit saya di sini: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ dari mana informasi ini berasal.

Langkah 1 - Seret .ttf atau .otf Anda dari Finder ke Proyek Anda

CATATAN - Pastikan untuk mengklik kotak 'Tambah ke target' pada target aplikasi utama Anda

Seret file font ke proyek Anda dan klik untuk menambahkannya ke target Anda

Jika Anda lupa untuk klik untuk menambahkannya ke target kemudian klik pada file font dalam hirarki proyek Anda dan pada panel sebelah kanan klik target aplikasi utama dalam Sasaran Keanggotaan bagian

cara menambahkan font ke target aplikasi jika Anda lupa

Untuk memastikan font Anda adalah bagian dari target aplikasi Anda, pastikan font itu muncul di Sumber Salin Bundel Anda dalam Fase Pembuatan

cara memeriksa sumber daya untuk melihat apakah font merupakan bagian dari target aplikasi

Langkah 2 - Tambahkan nama file font ke Plist Anda

Buka Properti Target iOS Khusus di Bagian Info Anda dan tambahkan kunci ke item di bagian yang disebut Fonts provided by application(Anda akan melihatnya muncul sebagai opsi saat Anda mengetik dan itu akan mengatur dirinya sendiri sebagai sebuah array. Klik panah kecil untuk membuka item array dan ketik nama file .ttf atau .otf yang Anda tambahkan untuk memberi tahu aplikasi Anda bahwa ini adalah file font yang Anda inginkan tersedia

CATATAN - Jika aplikasi Anda mogok tepat setelah langkah ini maka periksa ejaan Anda pada item yang Anda tambahkan di sini

contoh plist dengan font kustom ditambahkan

Langkah 3 - Cari tahu nama font Anda sehingga Anda dapat memanggilnya

Seringkali nama font yang dilihat oleh aplikasi Anda berbeda dari apa yang Anda pikir didasarkan pada nama file untuk font itu, taruh ini dalam kode Anda dan lihat log aplikasi Anda membuat untuk melihat apa nama font untuk memanggil kode Anda

Cepat

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

Tujuan C

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

Log Anda akan terlihat seperti ini:

Contoh log pencarian untuk menemukan nama font

Langkah 4 - Gunakan font khusus baru Anda menggunakan nama dari Langkah 3

Cepat

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

Tujuan C

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

Temukan TTF di pencari dan "Dapatkan Info". Di bawah judul "Nama lengkap:" itu memberi saya nama yang kemudian saya gunakan fontWithName(saya hanya menyalin dan menempelkan nama yang tepat, dalam hal ini tidak diperlukan ekstensi '.ttf').

Nano
sumber
8

Ini belum keluar, tetapi versi cocos2d (kerangka permainan 2d) berikutnya akan mendukung font bitmap panjang variabel sebagai peta karakter.

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

Penulis tidak memiliki tanggal rilis yang dipaku untuk versi ini, tetapi saya memang melihat posting yang mengindikasikan itu akan berada dalam satu atau dua bulan mendatang.

John
sumber
8

Satu pemberitahuan penting: Anda harus menggunakan "Nama PostScript" yang terkait dengan font, bukan nama lengkap atau nama keluarga. Nama ini seringkali berbeda dari nama normal font.

pengguna576862
sumber
7

ikuti langkah ini

1) Salin font Anda di proyek Anda

2) buka .plistfile Anda dalam mode kode sumber ... (Catatan- Jangan buka info.plist)

3) Sebelum itu - Klik kanan pada font Anda dan buka di fontforge atau editor serupa dan installdi sistem Anda, itu harusinstall

4) Ketikkan ini

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

5) Ketikkan kode ini di class .m

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

Di sini lblPoints akan berubah pada Anda UILabel

Selesai !! Jika font Anda masih tidak berfungsi, periksa kompatibilitas font Anda terlebih dahulu

Kirtikumar A.
sumber
1
kenapa tidak buka info.plist?
Raptor
mengapa ada ruang di antara Myraid & Pro di poin ke 5 saat tidak ada di Plist di poin 4?
jayant rawat
@jayantrawat Nama fontnya yang ditampilkan dalam sistem setelah kita menginstal font, dan .plist adalah nama file font [.ttl atau otf]
Kirtikumar A.
@KirtikumarA. ya mengerti..diimplementasikan dengan sukses di aplikasi ..
jayant rawat
@jayantika jika solusi saya membantu maka mintalah untuk Anda memberikan jawaban atas jawaban sehingga pengguna lain dapat mengambil bantuan dengan cara yang sama
Kirtikumar A.
6

Mungkin penulis lupa memberi font nama Mac FOND ?

  1. Buka font di FontForge lalu pergi ke Elemen> Info Font
  2. Ada Opsi "Mac" di mana Anda dapat mengatur nama FOND.
  3. Di bawah File> Ekspor Font Anda dapat membuat ttf baru

Anda juga bisa mencoba opsi "Apple" di dialog ekspor.

DISCLAIMER : Saya bukan pengembang IPhone!

ByteNirvana
sumber
6

Saya telah mencoba berbagai saran di halaman ini di iOS 3.1.2 dan ini adalah kesimpulan saya:

Cukup menggunakan [UIFont fontWithName:size:]dengan font di direktori Resources tidak akan berfungsi, bahkan jika nama FOND diatur menggunakan FontForge.

[UIFont fontWithName:size:]akan berfungsi jika font dimuat pertama kali menggunakan GSFontAddFromFile. Tetapi GSFontAddFromFilebukan bagian dari iOS 3.1.2 sehingga harus dimuat secara dinamis seperti dijelaskan oleh @rpetrich.

Jacob Wallström
sumber
5

Lihatlah ATSApplicationFontsPath

Entri plist sederhana yang memungkinkan Anda untuk memasukkan file font (s) dalam folder sumber daya aplikasi Anda dan mereka "hanya bekerja" di aplikasi Anda.

Matt Sephton
sumber
Sudahkah Anda mencoba ini di perangkat? Saya tidak punya kegembiraan, dan googling menyarankan bahwa entri daftar ini tidak didukung pada iPhone, meskipun didokumentasikan untuk iPhone OS.
Airsource Ltd
1
Maaf, saya hanya menggunakannya di aplikasi OS X saat ini.
Matt Sephton
5

Saya telah menggabungkan beberapa saran pada halaman ini menjadi sesuatu yang bekerja untuk saya di iOS 5.

Pertama, Anda harus menambahkan font khusus ke proyek Anda. Kemudian, Anda harus mengikuti saran dari @iPhoneDev dan menambahkan font ke file info.plist Anda.

Setelah Anda melakukannya, ini berfungsi:

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

Namun, Anda perlu tahu nama Postscript font Anda. Cukup ikuti saran @Daniel Wood dan tekan command-i saat Anda berada di FontBook.

Lalu, nikmati font khusus Anda.

AaronBaker
sumber
5

Pertama tambahkan font dalam format .odt ke sumber daya Anda, dalam hal ini kami akan menggunakan DINEngschriftStd.otf, kemudian gunakan kode ini untuk menetapkan font ke label

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

Untuk memastikan font Anda dimuat pada proyek panggil saja

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

Pada .plist Anda harus mendeklarasikan font. Cukup tambahkan catatan 'Font yang disediakan oleh aplikasi' dan tambahkan string item 0 dengan nama font (DINEngschriftStd.otf)

Alejandro Luengo
sumber
5

Untuk iOS 3.2 dan di atasnya: Gunakan metode yang disediakan oleh beberapa di atas, yaitu:

  1. Tambahkan file font Anda (misalnya, Chalkduster.ttf ) ke folder Resources proyek di XCode.
  2. Buka info.plist dan tambahkan kunci baru yang disebut UIAppFonts. Jenis kunci ini harus berupa array.
  3. Tambahkan nama font khusus Anda ke array ini termasuk ekstensi (" Chalkduster.ttf ").
  4. Gunakan [UIFont fontWithName:@"Real Font Name" size:16]di aplikasi Anda.

TETAPI "Nama Font Asli" tidak selalu yang Anda lihat di Fontbook. Cara terbaik adalah bertanya pada perangkat Anda font apa yang dilihatnya dan nama persisnya.

Saya menggunakan uifont-name-grabber yang diposting di: uifont-name-grabber

Cukup letakkan font yang Anda inginkan ke proyek xcode, tambahkan nama file ke plistnya, dan jalankan di perangkat yang Anda buat, itu akan mengirimi Anda daftar font lengkap menggunakan nama yang UIFont fontWithName:diharapkan.

Jarson
sumber
5

Solusi yang lebih baik adalah menambahkan " Fonts provided by application" properti baru ke info.plistfile Anda .

Kemudian, Anda dapat menggunakan font khusus seperti biasa UIFont.

RichX
sumber
3

Ada cara baru untuk menggunakan font khusus, dimulai dengan iOS 4.1. Ini memungkinkan Anda untuk memuat font secara dinamis, baik dari file yang disertakan dengan aplikasi, data yang diunduh, atau apa pun yang Anda miliki. Ini juga memungkinkan Anda memuat font sesuai kebutuhan Anda, sedangkan metode lama memuat semuanya pada waktu startup aplikasi, yang bisa terlalu lama jika Anda memiliki banyak font.

Metode baru dijelaskan di ios-dynamic-font-loading

Anda menggunakan CTFontManagerRegisterGraphicsFontfungsinya, memberinya buffer dengan data font Anda. Ini kemudian tersedia untuk UIFontdan tampilan web, sama seperti dengan metode lama. Berikut kode contoh dari tautan itu:

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);
David M.
sumber
Saya telah menggunakan kode ini tetapi mendapatkan & kesalahan Gagal memuat font: Operasi tidak dapat diselesaikan. (com.apple.coretext error 105 - Tidak dapat mendaftarkan CGFont '<CGFont (0x14fe7df0): Shruti>')
Hiren
Menurut dokumentasi, kesalahan 105 adalah kCTFontManagerErrorAlreadyRegistered, "File telah terdaftar dalam ruang lingkup yang ditentukan." developer.apple.com/library/ios/#documentation/Carbon/Reference/…
David M.
3

Swift, cara kode: (berfungsi juga dengan swift 2.0)

Tambahkan font yang diperlukan ke proyek Anda (seperti menambahkan gambar, seret ke Xcode), pastikan bahwa mereka ditargetkan ke proyek Anda,
tambahkan metode ini dan muat font khusus (disarankan dalam 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: "")
    }

}

Gunakan contoh:

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

Gunakan fonta:

UIFont(name: "My-Font", size: 16.5)
Daniel Krom
sumber
Hanya ingin tahu, kenapa Anda tidak akan hanya menambahkan font di Info.plist Anda sepertinya lebih banyak pekerjaan untuk hal yang sama.
Stephen Jesse
2

Anda dapat menambahkan file "FONT" yang diperlukan dalam folder sumber daya. Kemudian buka Info.plistfile Proyek dan gunakan "Font yang disediakan oleh aplikasi" dan nilai sebagai "FONT NAME".

Maka Anda dapat memanggil metode [UIFont fontwithName:@"FONT NAME" size:12];

Nishan29
sumber
1

Saya membuat semuanya mungkin tetapi font baru tidak muncul jadi saya menemukan solusinya:

Saat Anda menyeret file fot (otf atau ttf) JANGAN lupa untuk mencentang kotak di bawah "Tambahkan ke target".

Setelah melakukan itu, font Anda akan muncul dan semuanya akan berfungsi dengan baik.

ElizaS
sumber
1

Meskipun beberapa jawaban di atas benar, saya telah menulis tutorial visual terperinci untuk orang-orang yang masih memiliki masalah dengan font.

Solusi di atas yang memberi tahu Anda untuk menambahkan font ke plist dan gunakan

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

adalah yang benar. Silakan lakukan sekarang menggunakan cara peretasan lainnya. Jika Anda masih menghadapi masalah dalam menemukan nama font dan menambahkannya, berikut adalah tutorialnya -

Menggunakan font khusus dalam aplikasi ios

Bharat Gulati
sumber
Saya baru saja mencoba ini. Tampaknya berfungsi tetapi font saya kecil, tidak peduli ukuran apa yang saya atur. Untuk apa nilainya, saya menggunakan file OTF yang tersedia secara bebas: philsfonts.com/index.php/free_fonts
ari gold
Cobalah dengan font khusus lain dan jika masalah tetap ada, beri tahu saya. Jika berfungsi seperti itu, maka ada masalah dengan font Anda.
Bharat Gulati
1

ya Anda dapat menggunakan font khusus di aplikasi Anda

langkah demi langkah mengikuti di sana:

Tambahkan file font khusus Anda ke proyek Anda dalam file pendukung

Tambahkan kunci ke file Info.plist Anda yang disebut UIAppFonts.

Jadikan kunci ini sebagai array

Untuk setiap font yang Anda miliki, masukkan nama lengkap file font Anda (termasuk ekstensi) sebagai item ke array UIAppFonts

Simpan Info.plist Sekarang di aplikasi Anda, Anda dapat memanggil [UIFont fontWithName: @ "Your font Name" ukuran: 20] untuk mendapatkan font khusus untuk digunakan dengan label UIL Anda setelah menerapkan ini jika Anda tidak mendapatkan font yang benar maka Anda klik dua kali pada font khusus, dan lihat dengan hati-hati nama font sisi atas datang dan salin font ini, tempel, di sini [UIFont fontWithName: @ "lewat Nama font Kustom Anda" size: 20]

Saya harap Anda mendapatkan jawaban yang benar

Akhil Bhadauria
sumber
1

ya Anda dapat menggunakan font khusus di aplikasi Anda

langkah demi langkah mengikuti di sana:

  • Tambahkan file font khusus Anda ke proyek Anda dalam file pendukung
  • Tambahkan kunci ke Info.plistfile Anda yang disebut UIAppFonts.
  • Jadikan kunci ini sebagai array
  • Untuk setiap font yang Anda miliki, masukkan nama lengkap file font Anda (termasuk ekstensi) sebagai item ke array UIAppFonts
  • Simpan Info.plist Sekarang di aplikasi Anda, Anda dapat menelepon [UIFont fontWithName:@"your Custom font Name" size:20]untuk mendapatkan font khusus untuk digunakan denganUILabels

setelah menerapkan ini jika Anda tidak mendapatkan font yang benar maka Anda klik dua kali pada font kustom, dan lihat dengan hati-hati nama font sisi atas datang dan salin font ini, tempel, di sini [UIFont fontWithName:@" here past your Custom font Name" size:20] saya harap Anda akan mendapatkan jawaban yang benar

pengguna2691469
sumber