UIFont / CTFont — nedir, yazı tipi türleri ve Core Text

Yazar: IT Sectr Yayınlanma: 2026-07-23 Okuma süresi: 9 dk

UIFont ve CTFont, iOS'ta yazı tipleriyle çalışmak için kullanılan sınıflardır: UILabel ve UITextView'de üst düzey metin yapılandırması için UIKit'ten UIFont, glifler ve metrikler üzerinde tam kontrol ile alt düzey işleme için Core Text'ten CTFont. Apple Developer Documentation'a göre UIFont, standart UI bileşenlerinin %90'ında kullanılırken, CTFont özel metin motorlarında ve düzenleyicilerde kullanılır. Her iki sınıf da aynı yazı tipini ancak farklı soyutlama seviyelerinde temsil eder.

Önemli Noktalar

  • UIFont — UI bileşenlerinde yazı tipleriyle çalışmak için üst düzey UIKit sınıfı
  • CTFont — tipografi üzerinde hassas kontrol için alt düzey Core Text sınıfı
  • UIFont systemFont, preferredFont veya initWithName ile oluşturulur, CTFont — CTFontCreateWithName ile
  • Dynamic Type — erişilebilirlik ayarlarına otomatik olarak yanıt veren iOS uyarlanabilir yazı tipi sistemi
  • CTFont glif metriklerine, kerning'e ve OpenType tablolarına doğrudan erişim sağlar

UIFont ve CTFont Nedir?

UIFont, UI bileşenlerinde (UILabel, UITextView, UITextField) metin görüntülemek için bir yazı tipini temsil eden UIKit sınıfıdır. Belirtilen boyut, ağırlık ve stille sistem ve özel yazı tiplerini almak için basit bir arayüz sağlar. UIFont, kerning, bitişik harfler ve OpenType özellikleri üzerinde doğrudan kontrol sağlamaz — bunun için Core Text kullanılır.

CTFont, yazı tipi verilerine alt düzey erişim sağlayan bir Core Text türüdür (CTFontRef). CTFont, işleme için doğrudan Core Graphics ile çalışır, alternatif glifler, bitişik harfler ve değişken yazı tipleri dahil tüm OpenType ve TrueType özelliklerini destekler. CTFont, dahili olarak UIKit tarafından UIFont'u işlemek için kullanılır ancak özel çizim için doğrudan da kullanılabilir.

Toll-Free Bridging

UIFont ve CTFont, Toll-Free Bridging'i destekler — ek maliyet olmadan türler arası dönüşüm. Swift ve Objective-C'de UIFont as CTFont veya CTFont as UIFont dönüşümü mümkündür. Bu, yazı tipi verilerini kopyalamadan yapılandırma için üst düzey UIKit API'sini ve işleme için alt düzey Core Text'i kullanmaya olanak tanır.

Yazı Tipi Tanımlayıcısı

Her iki sınıf da yazı tipi özelliklerini (ad, boyut, ağırlık, stil, dönüşüm matrisi) tanımlamak için UIFontDescriptor (UIKit) / CTFontDescriptor (Core Text) kullanır. Tanımlayıcı, mevcut yazı tiplerine dayalı olarak yeni yazı tipleri oluşturmak için değiştirilebilen bir öznitelik sözlüğüdür. Örneğin, bir tanımlayıcıya traitItalic ekleyin ve aynı yazı tipinin italik sürümünü elde edin.

UIFont — UIKit Yazı Tipleri

UIFont, yazı tipleri oluşturmak için çeşitli fabrika yöntemleri sağlar. systemFont(ofSize:) sistem yazı tipi San Francisco (iOS) veya Helvetica'yı (eski sürümler) döndürür. boldSystemFont, italicSystemFont — belirli stillere sahip varyantlar. preferredFont(forTextStyle:) belirtilen stil için Dynamic Type yazı tipini döndürür: .headline, .body, .caption1, .footnote. Sistemde metin boyutu ayarları değiştiğinde bu yazı tipleri otomatik olarak ölçeklenir.

Özel yazı tiplerini yüklemek için, yazı tipinin PostScript adıyla UIFont(name:size:) kullanılır. Yazı tipi önce Info.plist'e eklenmeli ve uygulama paketine dahil edilmelidir. Apple'a göre, tüm standart UI bileşenleri için UIFont kullanılması ve yalnızca özel işleme gerektiğinde CTFont'a geçilmesi önerilir.

Dynamic Type

Dynamic Type, iOS 7'de tanıtılan uyarlanabilir bir yazı tipi sistemidir. Kullanıcı Ayarlar'da tercih ettiği metin boyutunu seçer — ekstra küçükten ekstra büyüğe. UIFont.preferredFont otomatik olarak uygun boyutta bir yazı tipi döndürür. Doğru çalışma için tüm UILabel'lerde adjustsFontForContentSizeCategory = true olmalıdır. Dynamic Type, erişilebilirlik uyumu için zorunludur.

UIFontDescriptor

UIFontDescriptor, sıfırdan yeni bir örnek oluşturmadan yazı tipi özniteliklerini değiştirmeye olanak tanır. addingAttributes(_:), withSymbolicTraits(_:), withFamily(_:) yöntemleri, değiştirilmiş parametrelerle yeni bir tanımlayıcı döndürür. Bu, yazı tipi varyantları elde etmek için kullanışlıdır: PostScript adını bilmeden sistem yazı tipine traitBold ekleyin ve kalın sürümü elde edin.

CTFont — Core Text Yazı Tipleri

CTFont (CTFontRef), alt düzey yazı tipi çalışması için bir Core Text türüdür. CTFontCreateWithName, CTFontCreateWithFontDescriptor, CTFontCreateCopyWithAttributes tarafından oluşturulur. Her işlev, belirtilen arayüz, boyut ve isteğe bağlı özniteliklerle bir yazı tipi döndürür. CTFont, drawRect aracılığıyla özel UIView'lerde metin işlemek için Core Graphics'te kullanılır.

CTFont, UIFont'ta bulunmayan metriklere erişim sağlar: CTFontGetGlyphsForCharacters belirtilen karakterler için bir glif dizisi döndürür, CTFontGetAdvancesForGlyphs — her glifin genişliği, CTFontGetBoundingBox — glif sınırları. Bu, özel metin düzenleri oluşturmak için gereklidir: sütunlar, döndürme, sarma.

Yazı Tipi Metrikleri

CTFontGetAscent, CTFontGetDescent, CTFontGetLeading dikey yazı tipi metriklerini döndürür. CTFontGetUnitsPerEm — em-kare başına birim sayısı, oran hesaplaması için kullanılır. CTFontGetGlyphCount — yazı tipindeki toplam glif sayısı. Bu veriler, her karakterin hassas konumlandırılmasının gerektiği baskı tipografisi ve özel düzenler için kritiktir.

OpenType ve Değişken Yazı Tipleri

CTFont OpenType özelliklerini destekler: CTFontCopyFeatures kullanılabilir yazı tipi işlevlerinin (bitişik harfler, alternatif karakterler, kerning) bir sözlüğünü döndürür, CTFontEnableFeature belirli bir seçeneği etkinleştirir. Değişken yazı tipleri CTFontCopyVariation ve CTFontCreateCopyWithVariation aracılığıyla yapılandırılır ve weight, width ve slant'ın sürekli bir aralıkta değiştirilmesine olanak tanır.

Kodda UIFont Kullanımı

Swift'te UIFont oluşturma, fabrika yöntemlerinden biri veya ada göre doğrudan başlatma yoluyla yapılır. En yaygın yol, sistem yazı tipleri için systemFont(ofSize:weight:) veya Dynamic Type için preferredFont(forTextStyle:) kullanmaktır. Özel yazı tipleri için, PostScript adı belirtilerek UIFont(name:size:) kullanılır.

Farklı Ağırlıklarda Sistem Yazı Tipi

UIFont.systemFont(ofSize:weight:) UIFont.Weight'ü kabul eder — .ultraLight'dan .black'e. Bu yöntem, karşılık gelen ağırlıkta San Francisco sistem yazı tipini döndürür. UIFont.monospacedSystemFont, UIFont.monospacedDigitSystemFont kod ve sayılar için tek aralıklı yazı tiplerini döndürür. Tüm sistem yazı tipleri otomatik olarak Dynamic Type'ı destekler.

swift
let regularFont = UIFont.systemFont(ofSize: 16, weight: .regular)
let boldFont = UIFont.systemFont(ofSize: 16, weight: .bold)
let headlineFont = UIFont.preferredFont(forTextStyle: .headline)
let monoFont = UIFont.monospacedSystemFont(ofSize: 14, weight: .regular)
label.font = headlineFont

Her yazı tipi doğrudan UILabel'in font özelliğine atanabilir veya NSFontAttributeName aracılığıyla NSAttributedString'de kullanılabilir. Sistem yazı tipleri iOS tarafından önbelleğe alınır, bu nedenle bir sistem yazı tipini yeniden oluşturmak ek yük oluşturmaz.

Paketten Özel Yazı Tipi

Özel bir yazı tipi kullanmak için TTF veya OTF dosyasını proje paketine ekleyin ve Info.plist (UIAppFonts) içinde belirtin. Yazı tipinin PostScript adı UIFont.familyNames ve UIFont.fontNames(forFamilyName:) aracılığıyla bulunabilir. Kayıttan sonra, yazı tipi uygulamanın herhangi bir yerinden UIFont(name:size:) aracılığıyla kullanılabilir.

swift
// Tüm yazı tipi aile adlarını al
for family in UIFont.familyNames {
    let names = UIFont.fontNames(forFamilyName: family)
    print("\(family): \(names)")
}
// Özel yazı tipini yükle
if let customFont = UIFont(name: "MyCustomFont-Regular", size: 18) {
    label.font = customFont
}

Yazı tipi adı yanlış belirtilirse, UIFont(name:size:) nil döndürür. Hata ayıklama sırasında UIFont.familyNames ve UIFont.fontNames(forFamilyName:) aracılığıyla tüm kullanılabilir yazı tipi adlarını yazdırarak yazı tipinin doğru kaydedildiğinden emin olunması önerilir.

UIFont ve CTFont ile Özel Yazı Tipleri

Özel yazı tiplerini yüklemek iki şekilde mümkündür: Info.plist (UIAppFonts) aracılığıyla statik kayıt ve CTFontManagerRegisterGraphicsFont aracılığıyla dinamik kayıt. İlk yöntem daha basittir — yazı tipi uygulama başlatıldıktan hemen sonra kullanılabilir. İkincisi, ağdan indirilen veya isteğe bağlı kaynaklar için kullanılır.

Dinamik kayıt, isteğe bağlı kaynaklar için kullanışlıdır: uygulama 20'den fazla yazı tipi içeriyorsa, tümü ilk paketten çıkarılabilir ve ilk kullanımda indirilebilir. CTFontManagerRegisterFontsForURLs, belirtilen URL'lerden yazı tiplerini kaydeder. Kayıttan sonra, yazı tipi her zamanki gibi UIFont(name:size:) aracılığıyla kullanılabilir hale gelir.

Özel Yazı Tipi için CTFontCreateWithName

Core Text aracılığıyla özel işleme için, yazı tipinin PostScript adıyla CTFontCreateWithName kullanın. UIFont'tan farkı, CTFont'un bir dönüşüm matrisi (CTFontCreateWithNameAndOptions) ile oluşturulabilmesidir — eğik, X ekseni ölçekleme, döndürme gibi bozuk yazı tipleri oluşturmak için. Bu, afin dönüşümler kullanılmadan UIFont'ta mevcut değildir.

swift
// Eğim matrisi ile CTFont oluştur
var matrix = CGAffineTransform(a: 1, b: 0, c: 0.2, d: 1, tx: 0, ty: 0)
let ctFont = CTFontCreateWithName(
    "Helvetica" as CFString,
    24, &matrix)
// UIFont ile Toll-Free Bridging kullan
let uiFont = ctFont as UIFont
label.font = uiFont

Dönüşüm matrisi, ayrı bir yazı tipi dosyası olmadan italik varyantlar oluşturmaya olanak tanır. c parametresi (skew) karakterlere eğiklik ekler. Matris ayrıca yazı tipini yatay olarak ölçeklemeye de olanak tanır — bir yazı tipinin yoğunlaştırılmış veya genişletilmiş varyantlarını oluşturma.

UIFont ve CTFont Arasındaki Farklar

UIFont ve CTFont arasındaki temel fark, soyutlama seviyesidir. UIFont, yaygın görevler için basit bir API sağlar: sistem yazı tipi alma, boyut değiştirme, UILabel'e uygulama. CTFont, yazı tipi üzerinde tam kontrol sağlar: gliflere, metrikLere, OpenType tablolarına ve değişken eksenlere erişim. Seçim, göreve bağlıdır.

ÖzellikUIFontCTFont
FrameworkUIKitCore Text
OluşturmasystemFont / preferredFont / initWithNameCTFontCreateWithName / CTFontCreateWithDescriptor
Glif ErişimiHayırCTFontGetGlyphsForCharacters
OpenType ÖzellikleriSınırlı (UIFontDescriptor)Tam Erişim
Değişken Yazı TipleriUIFontDescriptor aracılığıylaCTFontCopyVariation / CreateCopyWithVariation
İşlemeUI bileşenlerinde otomatikCore Graphics, özel

iOS geliştirme görevlerinin %95'i için UIFont yeterlidir. Core Text ile CTFont, metin düzenleyicileri, PDF oluşturucuları, tipografik düzene sahip kitaplar veya nadir dillerin özel işlemesini yapan uygulamalar oluştururken haklı çıkar.

Performans ve En İyi Uygulamalar

iOS'ta yazı tipleriyle çalışmak performansın dikkate alınmasını gerektirir. Her benzersiz yazı tipi, ilk erişimde belleğe yüklenir ve kaynak tüketir. San Francisco sistem yazı tipleri önceden yüklenmiştir ve ek yük oluşturmaz. Özel yazı tipleri dosyadan yüklenir ve ilk yüklemeden sonra sistem tarafından önbelleğe alınır.

Bir uygulamadaki benzersiz yazı tipi sayısının 3-5 aileyle sınırlandırılması önerilir. Her yazı tipi bellekte 50 KB ile 2 MB arasında yer kaplar. Aynı ailenin farklı ağırlıklarını (regular, bold, medium) kullanmak, birden çok farklı aileyi yüklemekten daha verimlidir.

UIFont Önbelleğe Alma

Sistem, oluşturulan UIFont örneklerini önbelleğe alır, bu nedenle UIFont.systemFont(ofSize: 16, weight: .regular) çağrılarının tekrarı yeni bir nesne oluşturmaz. Ancak, özel yazı tipleri için UIFont(name:size:) her zaman önbelleğe alınmaz — sık kullanılan yazı tiplerinin statik özelliklerde veya NSCache'te saklanması, dosyadan yeniden yüklemeyi önlemek için önerilir.

Zaman Uyumsuz Yazı Tipi Yükleme

CTFontManagerRegisterGraphicsFont aracılığıyla yazı tiplerini dinamik olarak kaydederken, yazı tipi dosyası ağdan indiriliyorsa süreç zaman uyumsuz olabilir. Bu durumda, UILabel veya UITextView yükleme tamamlanana kadar bir yedek sistem yazı tipi görüntülemelidir. Kayıttan sonra, yazı tipi kullanılabilir hale gelir ve ekran otomatik olarak metin görüntülemesini günceller.

Sıkça Sorulan Sorular

UIFont, CTFont'a ve geri dönüştürülebilir mi?

Evet, UIFont ve CTFont Toll-Free Bridging'i destekler. Dönüşüm basit dönüştürme ile yapılır: UIFont as CTFont veya CTFont as UIFont. Hiçbir ek yük veya veri kopyalama oluşmaz — her iki sınıf da bellekte aynı yazı tipi nesnesini işaret eder.

UIKit'te kullanım için hangisi tercih edilir?

Tüm UI bileşenleri için UIFont kullanın. UIKit için optimize edilmiştir, Dynamic Type'ı destekler ve sistem ayarları değiştiğinde doğru şekilde ölçeklenir. CTFont yalnızca Core Graphics aracılığıyla özel işleme veya alt düzey yazı tipi metrik erişimi gerektiğinde haklı çıkar.

UIFont(name:size:) için yazı tipi adı nasıl bulunur?

Aile listesi için UIFont.familyNames ve PostScript adları için UIFont.fontNames(forFamilyName:) kullanın. Hata ayıklama modunda bu kodu çağırın ve istediğiniz yazı tipini bulun. PostScript adı genellikle aile adını ve stili içerir: “SFProText-Regular”, “HelveticaNeue-Bold”.

UIFont değişken yazı tiplerini destekler mi?

Evet, UIFontDescriptor aracılığıyla değişken eksenleri yapılandırabilirsiniz: weight, width, slant. Ancak, değişken yazı tipleri için UIFont API'si CTFontCopyVariation'a kıyasla sınırlıdır. Değişken eksenler üzerinde tam kontrol için Core Text ve CTFontCreateCopyWithVariation kullanın.

UIFont doğru şekilde nasıl önbelleğe alınır?

Ad ve boyut birleşiminden anahtar içeren statik bir sözlük veya NSCache oluşturun. Sistem yazı tipleri için iOS örnekleri otomatik olarak önbelleğe alır, ancak UIFont(name:size:) aracılığıyla oluşturulan özel yazı tipleri için TTF dosyasından yeniden yüklemeyi önlemek amacıyla nesnelerin uygulama önbelleğinde saklanması önerilir.

Özet

  • UIFont — Dynamic Type ile UI bileşenlerinde yazı tipleri için üst düzey UIKit sınıfı
  • CTFont — işleme ve glif erişimi için alt düzey Core Text türü
  • UIFont systemFont, preferredFont veya UIFont(name:size:) ile oluşturulur
  • CTFont CTFontCreateWithName veya CTFontCreateWithDescriptor ile oluşturulur
  • Toll-Free Bridging UIFont ve CTFont arasında ücretsiz dönüşüme izin verir
  • Dynamic Type erişilebilirlik için zorunludur: preferredFont ve adjustsFontForContentSizeCategory kullanın
  • UIKit için UIFont kullanın, özel işleme için CTFont kullanın

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun