UIKit — nedir, temel kavramlar ve mimari

Yazar: IT Sectr Yayınlanma: 2026-04-30 Okuma süresi: 10 dk

UIKit, iOS ve macOS uygulamalarında grafik arayüzler oluşturmak için bir framework'tür. Set, UIView, UIViewController, kontrol öğeleri ve Auto Layout sistemini içerir ve uyarlanabilir ve etkileşimli ekranlar oluşturmayı sağlar. Apple Developer Documentation (2025)'a göre UIKit, pencereler, görünümler, animasyonlar, jestler ve metinle çalışmak için 200'den fazla sınıf içerir — tüm iPhone ve iPad uygulamalarının temelidir.

Önemli Noktalar

  • UIKit, iOS, iPadOS ve macOS'ta arayüzler oluşturmak için Apple'ın framework'üdür ve görünüm yönetiminde emir kipi yaklaşımını kullanır.
  • UIView, tüm görsel öğeler için temel sınıftır: düğmeler, metin alanları, resimler ve kaplar.
  • UIViewController, ekranın yaşam döngüsünü yönetir: görünüm yüklemesinden bellek serbest bırakmaya kadar.
  • Auto Layout, öğelerin konumunu bir kısıtlama sistemi aracılığıyla tanımlar ve arayüzü farklı ekran boyutlarına uyarlar.
  • Delegeler ve dataSource, tablolar ve koleksiyonlar için temel kalıptır ve verileri görüntülemeden ayırır.

UIKit nedir?

UIKit, iOS, iPadOS ve macOS'ta (Mac Catalyst aracılığıyla) kullanıcı arayüzleri oluşturmak ve yönetmek için sınıflar sağlayan bir Apple framework'üdür. Core Animation, Core Graphics ve Quartz Core üzerinde çalışır ve düşük seviyeli işlemeyi yüksek seviyeli nesnelere (düğmeler, etiketler, resimler ve kaplar) soyutlar. UIKit, 2007'de iPhone OS 1 ile çıktı ve SwiftUI'nin yanında iOS geliştirme için birincil framework olmaya devam ediyor.

Framework, emir kipi yaklaşımını izler: geliştirici UIButton, UILabel, UIImageView sınıflarının örneklerini oluşturur, özelliklerini (renk, yazı tipi, konum) ayarlar ve bunları addSubview aracılığıyla görünüm hiyerarşisine ekler. Arayüzdeki her değişiklik açıkça yapılır — perde arkasında sihirli güncellemeler yoktur. Bu, UIKit'i, durum tanımının arayüzü otomatik olarak yeniden çizdiği SwiftUI gibi bildirimsel framework'lerden ayırır.

UIKit'in Temel Sınıfları

Framework, birkaç sınıf kategorisi içerir. UIView, tüm görsel bileşenlerin miras aldığı temel öğedir. UIWindow, görünümlerin ekranda görüntülendiği üst düzey kaptır. UIViewController, bir dizi görünümü yönetir ve ekran döndürme, klavye görünümü ve sistem bildirimlerine yanıt verir. UIApplication, dokunma olaylarını ve düğme basmalarını işleyen giriş noktasıdır.

Metin için UILabel (statik metin), UITextField (tek satırlı giriş), UITextView (çok satırlı giriş) kullanılır. Düğmeler için — UIButton (sistem, özel ve SF Symbols ikonografisi dahil). Gezinme için — UINavigationController, UITabBarController ve UISplitViewController. Toplamda, UIKit'in 200'den fazla genel sınıfı vardır.

UIKit Mimarisi: Katmanlar ve Görünüm Hiyerarşisi

UIKit mimarisi katmanlar üzerine inşa edilmiştir: her katman görüntülemenin belirli bir yönünden sorumludur. En alt seviyede Core Graphics (yollar, metin ve resimler için işleme motoru) bulunur. Üstünde, katman kompozisyonunu (CALayer) ve durumlar arasındaki animasyonları yöneten Core Animation bulunur. UIKit, bunların üzerinde nesne yönelimli bir API (UIView, UIViewController ve UIResponder) oluşturur.

Her uygulamanın bir görünüm hiyerarşisi vardır — kökü UIWindow olan bir ağaç. Altında kök UIViewController, görünümü ve içinde iç içe geçmiş alt görünümler bulunur. Dokunma olayları, yanıtlayıcı zinciri boyunca yayılır: en derin iç içe geçmiş görünümden ebeveynlerine ve UIApplication'a kadar. Hiçbir nesne dokunmayı işlemezse yok sayılır.

UIView ve CALayer

Her UIView, ekrandaki piksel işlemeyi yöneten bir CALayer içerir. Görünüm, dokunma ve erişilebilirliği yönetir; katman, grafikleri (gölge, cornerRadius, kenarlık, dönüşüm) yönetir. Bu ayrım, ağır grafiklerin ana iş parçacığını engellemeden ayrı bir iş parçacığına (işleme sunucusu) aktarılmasını sağlar. Apple, ekranda 200'den fazla görünüm varsa doğrudan CALayer ile çalışmayı önerir — bu CPU yükünü azaltır.

Yanıtlayıcı Zinciri Ayrıntılı

Yanıtlayıcı zinciri, ilk olarak bir dokunma olayını alan nesneyle başlar. Olayı işlemezse (touchesBegan yöntemi geçersiz kılınmamışsa), olay zincirdeki bir sonraki yanıtlayıcıya (next, superview, next responder, UIViewController, UIWindow, UIApplication, App Delegate) geçer. Bu, her görünüme bir işleyici eklemeden sahne düzeyinde genel jestleri ve klavye olaylarını ele geçirmeyi sağlar.

UIViewController Yaşam Döngüsü

Her UIViewController kesin olarak tanımlanmış bir olay dizisinden geçer. Yaşam döngüsü şu aşamaları içerir: başlatma, görünüm yükleme, ekranda görünme, döndürmede düzen güncelleme, gizleme, ekrandan çıkma ve bellek serbest bırakma. Geliştirici, her aşamada özel kod yürütmek için ilgili yöntemleri geçersiz kılar.

swift
class ProfileViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        loadUserProfile()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        clearCache()
    }
}

viewDidLoad'da arayüz yapılandırılır — alt görünümler oluşturulur, kısıtlamalar ayarlanır, delegeler abone olunur. viewWillAppear'da görüntülemeden önce işlemler yapılır: ağdan taze veri yükleme, değerleri güncelleme. viewDidDisappear, bildirimlerden aboneliği iptal etme ve geçici verileri temizleme yeridir. Tüm geçersiz kılmalarda super çağrısı zorunludur, aksi takdirde olay zinciri bozulur.

Bellek Yönetimi ve viewDidUnload

Eski iOS sürümlerinde, bellek azaldığında çağrılan viewDidUnload yöntemi vardı. iOS 6'dan itibaren yöntem kaldırıldı — UIKit artık görünür olmadıklarında denetleyicilerin görünümlerini otomatik olarak boşaltır. Geliştiricinin yalnızca görünüm referanslarını weak olarak bildirmesi yeterlidir, böylece ARC bir sistem uyarısı aldığında belleği doğru şekilde serbest bırakabilir.

Denetleyiciler Arası Geçişler

UIKit iki tür geçişi destekler: segue (Storyboard aracılığıyla) ve UINavigationController aracılığıyla programatik gezinme. Programatik bir geçiş şöyle görünür: navigationController?.pushViewController(detailVC, animated: true). Bu durumda, detailVC'nin yaşam döngüsü normal şekilde ilerler — viewDidLoad bir kez çağrılır, viewWillAppear her göründüğünde çağrılır.

Auto Layout ve Uyarlanabilir Düzen

Auto Layout, matematiksel ilişkilere (kısıtlamalar) dayalı bir konumlandırma sistemidir. Sabit kodlanmış X ve Y koordinatları yerine, geliştirici kuralları tanımlar: “düğme, etiketin sağında 16pt boşlukla” veya “görünüm, solda ve sağda 20pt kenar boşluğuyla ekran genişliğine yayılır.” Sistem, çalışma zamanında ortaya çıkan denklem sistemini çözer ve arayüzü herhangi bir ekran boyutuna uyarlar.

Kısıtlamalar Interface Builder'da (sürükle-bırak yoluyla) veya programatik olarak Swift'te ayarlanabilir. Her kısıtlama, firstItem, firstAttribute, relation, secondItem, secondAttribute, multiplier, constant parametrelerine sahip NSLayoutConstraint sınıfının bir örneğidir. Kısıtlamalar isActive = true ile veya toplu olarak NSLayoutConstraint.activate() ile etkinleştirilir.

Safe Area ve Layout Margins

iPhone X'in (2017) tanıtılmasıyla Apple, Safe Area'yı tanıttı — çentik, yuvarlak köşeler ve ana sayfa çubuğu göstergesinden arındırılmış ekran alanı. Kısıtlamalar view'e değil view.safeAreaLayoutGuide'a bağlanmalıdır. Layout Margins, görünüme iç dolgu ekler, varsayılan olarak bağlama bağlı olarak 8pt veya 16pt. safeAreaLayoutGuide kullanımı, tüm iPhone ve iPad nesillerinde doğru görüntülemeyi sağlar.

Kısıtlama Animasyonu

Auto Layout, kısıtlama sabitlerini değiştirerek animasyonu destekler. Bir kısıtlamanın constant'ını güncelleyin ve animasyon bloğu içinde layoutIfNeeded ile UIView.animate'i çağırın. Sistem, hiyerarşideki tüm görünümlerin konumunu sorunsuz bir şekilde yeniden hesaplar. Bu teknik, genişletilebilir bloklar, uyarlanabilir klavye panelleri ve ekran yönü değişiklikleri için kullanılır.

Tablolar ve Koleksiyonlarla Çalışma

UITableView ve UICollectionView, listeleri ve ızgaraları görüntülemek için iki güçlü UIKit aracıdır. UITableView, tek sütunlu dikey listeler (sohbet, ayarlar, haber akışı) için uygundur. UICollectionView, ızgaralar, yatay listeler, atlıkarıncalar ve özel düzenler (galeri, ürünler, takvim) içindir. Her iki sınıf da verileri görünümden ayırmak için delegasyon kalıbını kullanır.

Veri kaynağı, zorunlu yöntemler numberOfRowsInSection ve cellForRowAt ile UITableViewDataSource protokolüdür. UITableViewDelegate, hücre dokunmalarını, satır yüksekliklerini ve kaydırma olaylarını işler. Yeniden kullanım tanımlayıcı mekanizması, ekranın dışına kayan hücreleri yeniden kullanır; bu, büyük listelerde performans için kritiktir.

swift
class ContactsViewController: UITableViewController {

    private let contacts = ["Anna", "Boris", "Viktor"]

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self,
                           forCellReuseIdentifier: "cell")
    }

    override func tableView(_ tableView: UITableView,
                          numberOfRowsInSection section: Int) -> Int {
        return contacts.count
    }

    override func tableView(_ tableView: UITableView,
                          cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell",
                                                 for: indexPath)
        var content = cell.defaultContentConfiguration()
        content.text = contacts[indexPath.row]
        cell.contentConfiguration = content
        return cell
    }
}

Örnek, bir dizi dizeyi görüntülemek için minimum bir denetleyici gösterir. Hücre, kullanımdan kaldırılan textLabel ve detailTextLabel'ın yerini alan modern bir API (iOS 14+) olan UIListContentConfiguration aracılığıyla yapılandırılır. viewDidLoad'da hücre sınıfını kaydetmek zorunludur, aksi takdirde uygulama bir çalışma zamanı istisnasıyla çöker.

UICollectionView ve Compositional Layout

iOS 13'ten itibaren Apple, karmaşık düzenler oluşturmak için UICollectionViewCompositionalLayout'u önerir. Geliştirici, bölümü, grubu, öğeyi ve boyutlarını bildirimsel olarak tanımlar — rastgele geometriye sahip bir ızgara elde edilir: şerit, 2x2 ızgara, atlıkarınca veya süs. Compositional Layout, tüm yeni projeler için eski UICollectionViewFlowLayout'un yerini almıştır. DiffableDataSource ile birleştirildiğinde, bir koleksiyonun güncellenmesi tek bir apply(snapshot) çağrısına indirgenir ve değişiklik animasyonları otomatik olarak gerçekleştirilir.

Swift Kod Örnekleri

Aşağıda, gerçek görevlerde UIKit kullanımına ilişkin iki pratik örnek verilmiştir: gölge ve yuvarlak köşeli özel bir görünüm oluşturma ve listeden bir öğeyi silmek için kaydırma jestini işleme.

swift
extension UIView {
    func applyCardStyle() {
        layer.cornerRadius = 12
        layer.shadowOpacity = 0.15
        layer.shadowRadius = 8
        layer.shadowOffset = CGSize(width: 0, height: 2)
        layer.masksToBounds = false
    }
}

@objc private func handleSwipe(_ gesture: UISwipeGestureRecognizer) {
    guard let swipedView = gesture.view else { return }
    UIView.animate(withDuration: 0.3) {
        swipedView.alpha = 0
        swipedView.transform = CGAffineTransform(translationX: 300, y: 0)
    } completion: { _ in
        swipedView.removeFromSuperview()
    }
}

applyCardStyle uzantısı, herhangi bir görünüme gölge ve yuvarlak köşeler ekler — ürün kartları, profiller ve bildirimler için kullanışlıdır. Animasyonlu handleSwipe yöntemi, kullanıcı bir öğenin üzerinde sağa kaydırdığında öğeyi siler. İşleyici, UISwipeGestureRecognizer(direction: .right) yapılandırmasıyla addGestureRecognizer aracılığıyla görünüme eklenir. Gölgenin görünüm sınırları tarafından kırpılmasını önlemek için masksToBounds = false ayarlamak önemlidir.

Daha karmaşık arayüzler için, iç içe geçmiş görünümleri otomatik olarak yatay veya dikey olarak dağıtan bir kap olan UIStackView'i kullanın. Stack View, düzeni basitleştirir: her öğe için kısıtlama ayarlamaya gerek yoktur, yalnızca yığının kendisi için bir kısıtlama yeterlidir.

Sıkça Sorulan Sorular

UIView'de frame ve bounds arasındaki fark nedir?

Frame, superview koordinatlarında bir dikdörtgendir (konum + boyut). Bounds, görünümün kendi koordinatlarında bir dikdörtgendir (her zaman 0,0'dan başlar). Frame döndürme ve ölçeklemede değişir; bounds değişmez.

Kullanılmayan görünümlerden bellek nasıl boşaltılır?

UIKit, gizli denetleyicilerin görünümlerini otomatik olarak boşaltır. Geliştiricinin, ARC'nin bir sistem uyarısı aldığında belleği serbest bırakabilmesi için görünüm özelliklerini weak var olarak bildirmesi yeterlidir.

2026'da Storyboard kullanılmalı mı?

Yeni projeler için Apple SwiftUI'yi önerir. Proje UIKit kullanıyorsa — tek tek ekranlar için XIB veya SnapKit aracılığıyla programatik düzen kullanın. Storyboard, birleştirme çakışmaları oluşturur ve derlemeyi yavaşlatır.

UIKit'te karanlık mod nasıl uygulanır?

traitCollection desteği ile UIColor kullanın: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Info.plist'te UIUserInterfaceStyle anahtarıyla Karanlık Modu etkinleştirin.

UIStackView manuel kısıtlamalardan nasıl daha iyidir?

UIStackView, alignment, distribution ve spacing'e dayalı olarak iç içe geçmiş görünümlerin konumlarını ve boyutlarını otomatik olarak hesaplar. Kısıtlama kodunu %60–80 oranında azaltır ve farklı ekranlara uyarlamayı basitleştirir.

Özet

  • UIKit, iOS, iPadOS ve macOS arayüzlerini emir kipi yaklaşımıyla oluşturmak için Apple'ın birincil framework'üdür.
  • UIView, işleme ve dokunmayı yönetir; grafik kısmı ayrı bir iş parçacığında çalışan CALayer katmanı tarafından işlenir.
  • UIViewController, viewDidLoad'dan bellek serbest bırakmaya kadar her aşamayı geçersiz kılma yeteneğiyle katı bir yaşam döngüsü izler.
  • Auto Layout, sabit koordinatları bir kısıtlama sistemiyle değiştirir ve arayüzü herhangi bir ekran boyutuna ve yönüne uyarlar.
  • UITableView ve UICollectionView, yeniden kullanım tanımlayıcılarıyla büyük listelerde performans sağlar ve modern Compositional Layout'u destekler.
  • UIStackView, görünüm dizilerinin düzenini basitleştirir ve kısıtlama kodunu %60–80 oranında azaltır.
  • Yeni projeler için Apple SwiftUI'yi önerir, ancak UIKit eski iOS sürümlerini ve karmaşık özel arayüzleri desteklemek için geçerliliğini korur.

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