UIKit — bu nədir, əsas anlayışlar və arxitektura

Müəllif: IT Sectr Dərc olunub: 2026-04-30 Oxuma vaxtı: 10 dəq

UIKit — iOS və macOS tətbiqlərində qrafik interfeyslər qurmaq üçün freymvorkdur. Dəstə UIView, UIViewController, idarəetmə elementləri və Auto Layout sistemi daxildir, adaptiv və interaktiv ekranlar yaratmağa imkan verir. Apple Developer Documentation (2025)-ya görə, UIKit pəncərələr, görünüşlər, animasiyalar, jestlər və mətnlə işləmək üçün 200-dən çox sinif ehtiva edir — bu iPhone və iPad üçün bütün tətbiqlərin əsasıdır.

Əsas məqamlar

  • UIKit — iOS, iPadOS və macOS-da görünüşlərin idarə edilməsinə imperativ yanaşma ilə interfeyslər qurmaq üçün Apple freymvorkudur.
  • UIView — bütün vizual elementlər üçün əsas sinif: düymələr, mətn sahələri, şəkillər və konteynerlər.
  • UIViewController ekranın həyat dövrünü idarə edir: görünüşün yüklənməsindən yaddaşın boşaldılmasına qədər.
  • Auto Layout elementlərin mövqeyini məhdudiyyətlər sistemi vasitəsilə təsvir edir, interfeysi müxtəlif ekran ölçülərinə uyğunlaşdırır.
  • Delegatlar və dataSource — cədvəllər və kolleksiyalar üçün əsas nümunə, məlumatları və onların göstərilməsini ayırır.

UIKit nədir?

UIKit — Apple-dan iOS, iPadOS və macOS-da (Mac Catalyst vasitəsilə) istifadəçi interfeysi yaratmaq və idarə etmək üçün siniflər təqdim edən freymvorkdur. Core Animation, Core Graphics və Quartz Core üzərində işləyir, aşağı səviyyəli renderi yüksək səviyyəli obyektlərə — düymələrə, etiketlərə, şəkillərə və konteynerlərə abstraksiya edir. UIKit 2007-ci ildə iPhone OS 1 ilə birlikdə ortaya çıxdı və SwiftUI ilə yanaşı iOS tərtibatı üçün əsas freymvork olaraq qalır.

Freymvork imperativ yanaşmaya əməl edir: tərtibatçı UIButton, UILabel, UIImageView siniflərinin instansiyalarını yaradır, onların xüsusiyyətlərini (rəng, şrift, mövqe) təyin edir və addSubview vasitəsilə görünüş iyerarxiyasına əlavə edir. İnterfeysdə hər dəyişiklik açıq şəkildə yerinə yetirilir — pərdə arxasında heç bir sehrli yeniləmə yoxdur. Bu, UIKit-i vəziyyətin təsvirinin avtomatik olaraq interfeysi yenidən çəkdiyi SwiftUI kimi deklarativ freymvorklardan fərqləndirir.

UIKit-in əsas sinifləri

Freymvork bir neçə sinif kateqoriyası ehtiva edir. UIView — bütün vizual komponentlərin varis aldığı əsas element. UIWindow — görünüşlərin ekranda göstərildiyi ən yüksək səviyyəli konteyner. UIViewController — görünüşlər dəstini idarə edən və ekran dönmələrinə, klaviaturanın görünməsinə və sistem bildirişlərinə reaksiya verən nəzarətçi. UIApplication — toxunma və düymə basma hadisələrini emal edən giriş nöqtəsi.

Mətn üçün UILabel (statik mətn), UITextField (tək sətirli daxiletmə), UITextView (çox sətirli daxiletmə) istifadə olunur. Düymələr üçün — UIButton, o cümlədən sistem, fərdi və SF Symbols ikonoqrafiyası ilə. Naviqasiya üçün — UINavigationController, UITabBarController və UISplitViewController. Ümumilikdə UIKit 200-dən çox publik sinif ehtiva edir.

UIKit arxitekturası: təbəqələr və görünüş iyerarxiyası

UIKit arxitekturası təbəqələr üzərində qurulur: hər təbəqə göstərilmənin öz aspektinə cavabdehdir. Ən aşağı səviyyədə Core Graphics — yolların, mətnin və şəkillərin render mühərriki yerləşir. Yuxarıda — Core Animation, təbəqələrin (CALayer) kompozisiyasını və vəziyyətlər arasında animasiyaları idarə edir. UIKit onların üzərində obyekt yönümlü API qurur: UIView, UIViewController və UIResponder.

Hər tətbiqin görünüş iyerarxiyası (view hierarchy) var — kökü UIWindow olan ağac. Onun altında — kök UIViewController, onun görünüşü və içəridə — iç-içə subview-lər. Toxunma hadisələri responder chain zənciri boyunca yayılır: ən iç-içə görünüşdən valideynlərə və daha sonra UIApplication-a. Heç bir obyekt toxunmanı emal etməyibsə, nəzərə alınmır.

UIView və CALayer

Hər UIView ekranda piksellərin renderinə cavabdeh olan CALayer təbəqəsi ehtiva edir. Görünüş toxunmaları və əlçatanlığı idarə edir, təbəqə — qrafikanı: shadow, cornerRadius, border, transform. Bölgü ağır qrafikanı ayrı bir ipə (render server) köçürməyə imkan verir, main thread-ı bloklamadan. Apple bir ekranda 200-dən çox görünüş lazım olduqda birbaşa CALayer ilə işləməyi tövsiyə edir — bu CPU yükünü azaldır.

Responder Chain detalları

Responder zənciri toxunma hadisəsini ilk qəbul edən obyektdən başlayır. Əgər hadisəni emal etmirsə (metod touchesBegan dəyişdirilməyibsə), hadisə zəncirdəki növbəti responder-ə ötürülür: next, superview, next responder, UIViewController, UIWindow, UIApplication, App Delegate. Bu, hər görünüşə işləyici əlavə etmədən səhnə səviyyəsində qlobal jestləri və klaviatura hadisələrini ələ keçirməyə imkan verir.

UIViewController-in həyat dövrü

Hər UIViewController ciddi şəkildə müəyyən edilmiş hadisələr ardıcıllığından keçir. Həyat dövrü fazaları əhatə edir: inisializasiya, görünüşün yüklənməsi, ekranda görünmə, dönmə zamanı düzülüşün yenilənməsi, gizlənmə, ekrandan getmə və yaddaşın boşaldılması. Tərtibatçı hər mərhələdə öz kodunu yerinə yetirmək üçün müvafiq metodları dəyişdirir.

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 interfeys konfiqurasiya olunur — subview-lər yaradılır, məhdudiyyətlər qoyulur, delegate-lər abunə edilir. viewWillAppear-da göstərilmədən əvvəl əməliyyatlar yerinə yetirilir: şəbəkədən təzə məlumatların yüklənməsi, dəyərlərin yenilənməsi. viewDidDisappear — bildirişlərdən imtina və müvəqqəti məlumatların təmizlənməsi yeri. Bütün dəyişdirmələrdə super-in çağırılması məcburidir, əks halda hadisələr zənciri pozulacaq.

Yaddaşın idarə edilməsi və viewDidUnload

iOS-un köhnə versiyalarında viewDidUnload metodu mövcud idi, yaddaş çatışmazlığında çağırılırdı. iOS 6-dan etibarən metod silinib — indi UIKit nəzarətçinin görünüşlərini görünməyəndə avtomatik boşaldır. Tərtibatçı yalnız görünüşlərə bütün istinadları weak olaraq təyin etməlidir ki, ARC sistem xəbərdarlığı aldıqda yaddaşı düzgün boşalda bilsin.

Nəzarətçilər arasında keçidlər

UIKit iki növ keçid dəstəkləyir: segue (Storyboard vasitəsilə) və UINavigationController vasitəsilə proqram naviqasiyası. Proqram keçidi belə görünür: navigationController?.pushViewController(detailVC, animated: true). Bununla detailVC-nin həyat dövrü normal qaydada keçir — viewDidLoad bir dəfə çağırılır, viewWillAppear — hər göstərilmədə.

Auto Layout və adaptiv düzülüş

Auto Layout — riyazi münasibətlərə (məhdudiyyətlərə) əsaslanan element yerləşdirmə sistemidir. Sərt şəkildə təyin edilmiş X və Y koordinatları əvəzinə tərtibatçı qaydaları təsvir edir: “düymə etiketin sağ tərəfində 16pt boşluqla yerləşir” və ya “görünüş ekranın eni boyunca 20pt sol və sağ boşluqla uzanır”. Sistem yaranan tənliklər sistemini runtime-da həll edir, interfeysi istənilən ekran ölçüsünə uyğunlaşdırır.

Məhdudiyyətlər Interface Builder-də (drag-and-drop vasitəsilə) və ya proqram olaraq Swift-də təyin edilə bilər. Hər məhdudiyyət NSLayoutConstraint sinfinin instansiyasıdır: firstItem, firstAttribute, relation, secondItem, secondAttribute, multiplier, constant parametrləri ilə. Məhdudiyyətlər isActive = true və ya kütləvi olaraq NSLayoutConstraint.activate() vasitəsilə aktivləşdirilir.

Safe Area və Layout Margins

iPhone X (2017) ilə Apple Safe Area-nı təqdim etdi — notch, yuvarlaq künclər və home bar göstəricisindən azad ekran sahəsi. Məhdudiyyətlər view.safeAreaLayoutGuide-ə bağlanmalıdır, view-ə deyil. Layout Margins görünüşün daxili boşluqlarını əlavə edir, kontekstdən asılı olaraq 8pt və ya 16pt. SafeAreaLayoutGuide istifadəsi iPhone və iPad-in bütün nəsillərində düzgün göstərilməni təmin edir.

Məhdudiyyətlərin animasiyası

Auto Layout məhdudiyyətlərin sabitlərini dəyişməklə animasiyanı dəstəkləyir. Məhdudiyyətin constant-ını yeniləmək və animasiya bloku daxilində UIView.animate-i layoutIfNeeded ilə çağırmaq kifayətdir. Sistem iyerarxiyada bütün görünüşlərin mövqeyini hamar şəkildə yenidən hesablayır. Bu texnika açılan bloklar, adaptiv klaviatura paneli və ekran oriyentasiyasının dəyişməsi üçün istifadə olunur.

Cədvəllər və kolleksiyalarla iş

UITableViewUICollectionView — siyahıları və şəbəkələri göstərmək üçün UIKit-in iki güclü aləti. UITableView bir sütunlu şaquli siyahılar üçün uyğundur (söhbət, parametrlər, xəbər lent). UICollectionView — şəbəkələr, üfüqi siyahılar, karusellər və fərdi düzülüşlər üçün (qalereya, məhsullar, təqvim). Hər iki sinif məlumatları və görünüşü ayırmaq üçün deleqasiya nümunəsindən istifadə edir.

Məlumat mənbəyi məcburi metodları olan UITableViewDataSource protokoludur: numberOfRowsInSectioncellForRowAt. Deleqat UITableViewDelegate hüceyrə basmalarını, sətir hündürlüyünü və skroll hadisələrini emal edir. Reuse identifier mexanizmi ekrandan çıxan hüceyrələri təkrar istifadə edir, bu böyük siyahılarda performans üçün kritik əhəmiyyət daşıyır.

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

Nümunə sətirlər massivini göstərmək üçün minimal nəzarətçi göstərir. Hüceyrə UIListContentConfiguration vasitəsilə konfiqurasiya olunur — köhnəlmiş textLabeldetailTextLabel-i əvəz edən müasir API (iOS 14+). Hüceyrə sinfinin viewDidLoad-da qeydiyyatı məcburidir, əks halda tətbiq runtime-da xəta ilə çökəcək.

UICollectionView və Compositional Layout

iOS 13-dən etibarən Apple mürəkkəb düzülüşlər qurmaq üçün UICollectionViewCompositionalLayout-ı tövsiyə edir. Tərtibatçı bölmə, qrup, element və onların ölçülərini deklarativ şəkildə təsvir edir — ixtiyari həndəsə ilə şəbəkə alır: lent, 2x2 şəbəkə, karusel, ornament. Compositional Layout bütün yeni layihələrdə köhnəlmiş UICollectionViewFlowLayout-u əvəz etdi. DiffableDataSource ilə birlikdə kolleksiyanın yenilənməsi bir apply(snapshot) çağırışına endirilir və dəyişikliklərin animasiyası avtomatik yerinə yetirilir.

Swift-də kod nümunələri

Aşağıda real tapşırıqlarda UIKit-dən istifadənin iki praktik nümunəsi verilmişdir: kölgə və yuvarlaqlıq ilə fərdi görünüş yaratmaq, həmçinin siyahıdan elementi silmək üçün sürüşdürmə jestinin işlənməsi.

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 genişləndirməsi istənilən görünüşə kölgə və yuvarlaqlıq əlavə edir — məhsul kartları, profillər və bildirişlər üçün faydalıdır. Animasiyalı handleSwipe metodu, istifadəçi elementi sağa sürüşdürdükdə onu silir. İşləyici görünüşə addGestureRecognizer vasitəsilə UISwipeGestureRecognizer(direction: .right) konfiqurasiyası ilə əlavə olunur. masksToBounds = false təyini vacibdir ki, kölgə görünüşün sərhədləri tərəfindən kəsilməsin.

Daha mürəkkəb interfeyslər üçün UIStackView istifadə edin — iç-içə görünüşləri üfüqi və ya şaquli olaraq avtomatik paylayan konteyner. Stack View düzülüşü sadələşdirir: hər element üçün məhdudiyyət qoymaq lazım deyil, stack-in özü üçün bir məhdudiyyət kifayətdir.

Tez-tez verilən suallar

UIView-də frame və bounds arasında nə fərq var?

Frame — superview koordinatlarında düzbucaqlı (mövqe + ölçü). Bounds — görünüşün öz koordinatlarında düzbucaqlı (həmişə 0,0-dan başlayır). Frame rotate və scale zamanı dəyişir, bounds — dəyişmir.

İstifadə olunmayan görünüşlərdən yaddaşı necə boşaltmaq olar?

UIKit gizli nəzarətçilərin görünüşlərini avtomatik boşaldır. Tərtibatçı görünüşlərin xüsusiyyətlərini weak var olaraq bəyan etməlidir ki, ARC sistem xəbərdarlığı aldıqda yaddaşı boşalda bilsin.

2026-cı ildə Storyboard istifadə etməyə dəyər?

Yeni layihələr üçün Apple SwiftUI tövsiyə edir. Layihə UIKit-dədirsə — ayrı-ayrı ekranlar üçün XIB və ya SnapKit vasitəsilə proqram düzülüşü istifadə edin. Storyboard merge conflicts yaradır və yığmanı ləngidir.

UIKit-də tünd mövzunu necə tətbiq etmək olar?

UIColor-dan traitCollection dəstəyi ilə istifadə edin: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Dark Mode-u Info.plist-də UIUserInterfaceStyle açarı ilə aktivləşdirin.

UIStackView əl ilə qoyulan məhdudiyyətlərdən nə ilə yaxşıdır?

UIStackView iç-içə görünüşlərin mövqelərini və ölçülərini alignment, distribution və spacing əsasında avtomatik hesablayır. Bu, məhdudiyyət kodunu 60–80% qısaldır və müxtəlif ekranlara uyğunlaşmanı sadələşdirir.

Nəticə

  • UIKit — iOS, iPadOS və macOS-da imperativ yanaşma ilə interfeyslər qurmaq üçün əsas Apple freymvorkudur.
  • UIView render və toxunmaları idarə edir; onun qrafik hissəsini ayrı bir ipdə işləyən CALayer təbəqəsi emal edir.
  • UIViewController ciddi həyat dövründən keçir: viewDidLoad-dan yaddaşın boşaldılmasına qədər, hər mərhələni dəyişdirmək imkanı ilə.
  • Auto Layout sərt koordinatları məhdudiyyətlər sistemi ilə əvəz edir, interfeysi istənilən ekran və oriyentasiyaya uyğunlaşdırır.
  • UITableViewUICollectionView reuse identifier ilə böyük siyahılarda performans təmin edir və müasir Compositional Layout-ı dəstəkləyir.
  • UIStackView görünüş ardıcıllığının düzülüşünü sadələşdirir, məhdudiyyət kodunu 60–80% qısaldır.
  • Yeni layihələr üçün Apple SwiftUI-ni tövsiyə edir, lakin UIKit köhnə iOS dəstəyi və mürəkkəb fərdi interfeyslər üçün aktual olaraq qalır.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun