UIKit — bu nima, asosiy tushunchalar va arxitektura

Muallif: IT Sectr Nashr etilgan: 2026-04-30 O'qish vaqti: 10 daq

UIKit — iOS va macOS ilovalarida grafik interfeyslarni qurish uchun freymvork. To'plam UIView, UIViewController, boshqaruv elementlari va Auto Layout tizimini o'z ichiga oladi, adaptiv va interaktiv ekranlarni yaratishga imkon beradi. Apple Developer Documentation (2025) ma'lumotlariga ko'ra, UIKit oyna, ko'rinish, animatsiya, imo-ishora va matn bilan ishlash uchun 200 dan ortiq klassni o'z ichiga oladi — bu iPhone va iPad uchun barcha ilovalarning asosidir.

Asosiy fikrlar

  • UIKit — iOS, iPadOS va macOS da ko'rinishlarni boshqarishga imperativ yondashuv bilan interfeyslar qurish uchun Apple freymvorki.
  • UIView — barcha vizual elementlar uchun asosiy klass: tugmalar, matn maydonlari, tasvirlar va konteynerlar.
  • UIViewController ekranning hayotiy siklini boshqaradi: ko'rinishni yuklashdan xotirani bo'shatishgacha.
  • Auto Layout elementlarning joylashishini cheklovlar tizimi orqali tavsiflaydi, interfeysni turli ekran o'lchamlariga moslashtiradi.
  • Delegatlar va dataSource — jadvallar va kolleksiyalar uchun asosiy andoza, ma'lumotlarni va ularning ko'rinishini ajratadi.

UIKit nima?

UIKit — Apple-dan iOS, iPadOS va macOS da (Mac Catalyst orqali) foydalanuvchi interfeysini yaratish va boshqarish uchun klasslar taqdim etadigan freymvork. U Core Animation, Core Graphics va Quartz Core ustida ishlaydi, past darajadagi renderlashni yuqori darajadagi obyektlarga — tugmalar, yorliqlar, tasvirlar va konteynerlarga abstraksiyalaydi. UIKit 2007 yilda iPhone OS 1 bilan birga paydo bo'ldi va SwiftUI bilan bir qatorda iOS dasturlash uchun asosiy freymvork bo'lib qolmoqda.

Freymvork imperativ yondashuvga amal qiladi: dasturchi UIButton, UILabel, UIImageView klasslarining instansiyalarini yaratadi, ularning xususiyatlarini (rang, shrift, joylashuv) o'rnatadi va addSubview orqali ko'rinishlar ierarxiyasiga qo'shadi. Interfeysdagi har bir o'zgarish aniq bajariladi — sahna ortida hech qanday sehrli yangilanish yo'q. Bu UIKit-ni SwiftUI kabi deklarativ freymvorklardan ajratib turadi, bu yerda holat tavsifi avtomatik ravishda interfeysni qayta chizadi.

UIKit ning asosiy klasslari

Freymvork bir nechta klass kategoriyalarini o'z ichiga oladi. UIView — barcha vizual komponentlar meros oladigan asosiy element. UIWindow — ko'rinishlar ekranda ko'rsatiladigan eng yuqori darajadagi konteyner. UIViewController — ko'rinishlar to'plamini boshqaradigan va ekran aylanishlariga, klaviatura paydo bo'lishiga va tizim bildirishnomalariga reaksiya beradigan boshqaruvchi. UIApplication — teginish va tugma bosish hodisalarini qayta ishlaydigan kirish nuqtasi.

Matn uchun UILabel (statik matn), UITextField (bir qatorli kiritish), UITextView (ko'p qatorli kiritish) ishlatiladi. Tugmalar uchun — UIButton, jumladan tizimli, moslashtirilgan va SF Symbols ikonografiyasi bilan. Navigatsiya uchun — UINavigationController, UITabBarController va UISplitViewController. Umumiy hisobda UIKit 200 dan ortiq umumiy klassni o'z ichiga oladi.

UIKit arxitekturasi: qatlamlar va ko'rinishlar ierarxiyasi

UIKit arxitekturasi qatlamlarga asoslangan: har bir qatlam ko'rsatishning o'z jihati uchun javobgardir. Eng past darajada Core Graphics — yo'llar, matn va tasvirlarni renderlash dvigateli joylashgan. Yuqorida — Core Animation, qatlamlar (CALayer) kompozitsiyasini va holatlar orasidagi animatsiyalarni boshqaradi. UIKit ularning ustida obyektga yo'naltirilgan API quriladi: UIView, UIViewController va UIResponder.

Har bir ilova ko'rinishlar ierarxiyasiga (view hierarchy) ega — ildizi UIWindow bo'lgan daraxt. Uning ostida — ildiz UIViewController, uning ko'rinishi va ichida — ichma-ich subview-lar. Teginish hodisalari responder chain zanjiri bo'ylab tarqaladi: eng ichki ko'rinishdan ota-onalarga va keyin UIApplication-ga. Agar hech qanday obyekt teginishni qayta ishlamasa, e'tiborga olinmaydi.

UIView va CALayer

Har bir UIView ekranda piksellarni renderlash uchun javobgar bo'lgan CALayer qatlamini o'z ichiga oladi. Ko'rinish teginishlar va foydalanish qulayligini boshqaradi, qatlam — grafikani: shadow, cornerRadius, border, transform. Bo'linish og'ir grafikani alohida ipga (render server) o'tkazishga imkon beradi, main thread-ni bloklamasdan. Apple bir ekranda 200 dan ortiq ko'rinish kerak bo'lganda to'g'ridan-to'g'ri CALayer bilan ishlashni tavsiya qiladi — bu CPU yukini kamaytiradi.

Responder Chain tafsilotlari

Responder zanjiri teginish hodisasini birinchi bo'lib qabul qiladigan obyektdan boshlanadi. Agar hodisani qayta ishlamasa (touchesBegan metodi o'zgartirilmagan bo'lsa), hodisa zanjirdagi keyingi responder-ga uzatiladi: next, superview, next responder, UIViewController, UIWindow, UIApplication, App Delegate. Bu har bir ko'rinishga ishlovchi qo'shmasdan sahna darajasida global imo-ishoralarni va klaviatura hodisalarini tutib olishga imkon beradi.

UIViewController hayotiy sikli

Har bir UIViewController qat'iy belgilangan hodisalar ketma-ketligidan o'tadi. Hayotiy sikl fazalarni o'z ichiga oladi: boshlang'ich sozlash, ko'rinishni yuklash, ekranda paydo bo'lish, aylanishda tartibni yangilash, yashirinish, ekrandan ketish va xotirani bo'shatish. Dasturchi har bir bosqichda o'z kodini bajarish uchun tegishli metodlarni o'zgartiradi.

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 sozlanadi — subview-lar yaratiladi, cheklovlar o'rnatiladi, delegatlar ro'yxatdan o'tkaziladi. viewWillAppear da ko'rsatishdan oldin operatsiyalar bajariladi: tarmoqdan yangi ma'lumotlarni yuklash, qiymatlarni yangilash. viewDidDisappear — bildirishnomalardan chiqish va vaqtinchalik ma'lumotlarni tozalash joyi. super ni chaqirish barcha o'zgartirishlarda majburiy, aks holda hodisalar zanjiri buziladi.

Xotira boshqaruvi va viewDidUnload

iOS ning eski versiyalarida viewDidUnload metodi mavjud edi, xotira yetishmovchiligida chaqirilardi. iOS 6 dan boshlab metod olib tashlandi — endi UIKit ko'rinmas bo'lganda boshqaruvchining ko'rinishlarini avtomatik ravishda tushiradi. Dasturchi faqat ko'rinishlarga barcha havolalarni weak deb e'lon qilishi kerak, shunda ARC tizim ogohlantirishini olganda xotirani to'g'ri bo'shata oladi.

Boshqaruvchilar o'rtasidagi o'tishlar

UIKit ikki turdagi o'tishni qo'llab-quvvatlaydi: segue (Storyboard orqali) va UINavigationController orqali dasturiy navigatsiya. Dasturiy o'tish quyidagicha ko'rinadi: navigationController?.pushViewController(detailVC, animated: true). Bunda detailVC ning hayotiy sikli normal tarzda o'tadi — viewDidLoad bir marta chaqiriladi, viewWillAppear — har bir ko'rsatishda.

Auto Layout va adaptiv tartib

Auto Layout — matematik munosabatlarga (cheklovlarga) asoslangan elementlarni joylashtirish tizimi. Qattiq belgilangan X va Y koordinatalari o'rniga dasturchi qoidalarni tavsiflaydi: “tugma yorliqning o'ng tomonida 16pt bo'shliq bilan joylashgan” yoki “ko'rinish ekran kengligi bo'ylab 20pt chap va o'ng bo'shliq bilan cho'ziladi”. Tizim hosil bo'lgan tenglamalar tizimini runtime-da yechadi, interfeysni istalgan ekran o'lchamiga moslashtiradi.

Cheklovlar Interface Builder da (drag-and-drop orqali) yoki dasturiy ravishda Swift da o'rnatilishi mumkin. Har bir cheklov NSLayoutConstraint klassining instansiyasidir: firstItem, firstAttribute, relation, secondItem, secondAttribute, multiplier, constant parametrlari bilan. Cheklovlar isActive = true yoki ommaviy ravishda NSLayoutConstraint.activate() orqali faollashtiriladi.

Safe Area va Layout Margins

iPhone X (2017) bilan Apple Safe Area ni taqdim etdi — notch, yumaloq burchaklar va home bar ko'rsatkichidan xoli ekran maydoni. Cheklovlar view.safeAreaLayoutGuide ga bog'lanishi kerak, view ga emas. Layout Margins ko'rinishning ichki bo'shliqlarini qo'shadi, kontekstga qarab sukut bo'yicha 8pt yoki 16pt. SafeAreaLayoutGuide dan foydalanish iPhone va iPad ning barcha avlodlarida to'g'ri ko'rsatishni kafolatlaydi.

Cheklovlar animatsiyasi

Auto Layout cheklovlarning konstantalarini o'zgartirish orqali animatsiyani qo'llab-quvvatlaydi. Cheklovning constant ini yangilash va animatsiya bloki ichida UIView.animate ni layoutIfNeeded bilan chaqirish kifoya. Tizim ierarxiyadagi barcha ko'rinishlarning joylashishini silliq qayta hisoblaydi. Bu texnika ochiladigan bloklar, adaptiv klaviatura paneli va ekran orientatsiyasini o'zgartirish uchun ishlatiladi.

Jadvallar va kolleksiyalar bilan ishlash

UITableView va UICollectionView — ro'yxatlar va to'rlarni ko'rsatish uchun UIKit ning ikki kuchli vositasi. UITableView bir ustunli vertikal ro'yxatlar uchun mos (chat, sozlamalar, yangiliklar lentasi). UICollectionView — to'rlar, gorizontal ro'yxatlar, karusellar va moslashtirilgan tartiblar uchun (galereya, mahsulotlar, kalendar). Ikkala klass ma'lumotlar va ko'rinishni ajratish uchun delegatsiya namunasidan foydalanadi.

Ma'lumot manbai majburiy metodlari bo'lgan UITableViewDataSource protokolidir: numberOfRowsInSection va cellForRowAt. Delegat UITableViewDelegate hujayra bosishlarini, qator balandligini va aylantirish hodisalarini qayta ishlaydi. Reuse identifier mexanizmi ekrandan chiqqan hujayralarni qayta ishlatadi, bu katta ro'yxatlarda ishlash uchun juda muhimdir.

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

Misol satrlar massivini ko'rsatish uchun minimal boshqaruvchini ko'rsatadi. Hujayra UIListContentConfiguration orqali sozlanadi — eskirgan textLabel va detailTextLabel ni almashtirgan zamonaviy API (iOS 14+). Hujayra klassini viewDidLoad da ro'yxatdan o'tkazish majburiy, aks holda ilova runtime da xato bilan ishdan chiqadi.

UICollectionView va Compositional Layout

iOS 13 dan boshlab, Apple murakkab tartiblarni qurish uchun UICollectionViewCompositionalLayout ni tavsiya qiladi. Dasturchi bo'lim, guruh, element va ularning o'lchamlarini deklarativ tarzda tavsiflaydi — ixtiyoriy geometriyaga ega to'rni oladi: lenta, 2x2 to'r, karusel, ornament. Compositional Layout barcha yangi loyihalarda eskirgan UICollectionViewFlowLayout o'rnini egalladi. DiffableDataSource bilan birgalikda kolleksiyani yangilash bitta apply(snapshot) chaqiruviga qisqaradi va o'zgarishlar animatsiyasi avtomatik ravishda bajariladi.

Swift-da kod namunalari

Quyida real vazifalarda UIKit dan foydalanishning ikkita amaliy namunasi keltirilgan: soya va yumaloqlik bilan moslashtirilgan ko'rinish yaratish, shuningdek ro'yxatdan elementni o'chirish uchun surish imo-ishorasini qayta ishlash.

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 kengaytmasi istalgan ko'rinishga soya va yumaloqlik qo'shadi — mahsulot kartalari, profillar va bildirishnomalar uchun foydali. Animatsiyali handleSwipe metodi, foydalanuvchi elementni o'ngga surganida uni o'chiradi. Ishlovchi ko'rinishga addGestureRecognizer orqali UISwipeGestureRecognizer(direction: .right) konfiguratsiyasi bilan qo'shiladi. masksToBounds = false sozlamasi muhim, chunki soya ko'rinish chegaralari tomonidan kesilmasligi kerak.

Murakkab interfeyslar uchun UIStackView dan foydalaning — ichma-ich ko'rinishlarni gorizontal yoki vertikal ravishda avtomatik taqsimlaydigan konteyner. Stack View tartibni soddalashtiradi: har bir element uchun cheklov o'rnatish shart emas, stackning o'zi uchun bitta cheklov yetarli.

Tez-tez beriladigan savollar

UIView da frame va bounds o'rtasidagi farq nima?

Frame — superview koordinatalarida to'rtburchak (joylashuv + o'lcham). Bounds — ko'rinishning o'z koordinatalarida to'rtburchak (har doim 0,0 dan boshlanadi). Frame rotate va scale da o'zgaradi, bounds — o'zgarmaydi.

Foydalanilmayotgan ko'rinishlardan xotirani qanday bo'shatish mumkin?

UIKit yashirin boshqaruvchilarning ko'rinishlarini avtomatik tushiradi. Dasturchi ko'rinishlarning xususiyatlarini weak var deb e'lon qilishi kerak, shunda ARC tizim ogohlantirishini olganda xotirani bo'shata oladi.

2026 yilda Storyboard dan foydalanishga arziydimi?

Yangi loyihalar uchun Apple SwiftUI ni tavsiya qiladi. Loyiha UIKit da bo'lsa — alohida ekranlar uchun XIB yoki SnapKit orqali dasturiy tartibdan foydalaning. Storyboard merge conflicts yaratadi va qurilishni sekinlashtiradi.

UIKit da qorong'u mavzuni qanday amalga oshirish mumkin?

UIColor dan traitCollection qo'llab-quvvatlashi bilan foydalaning: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Dark Mode ni Info.plist da UIUserInterfaceStyle kaliti bilan faollashtiring.

UIStackView qo'lda qo'yilgan cheklovlardan nima bilan yaxshi?

UIStackView ichma-ich ko'rinishlarning joylashuvi va o'lchamlarini alignment, distribution va spacing asosida avtomatik hisoblaydi. Bu cheklov kodini 60–80% qisqartiradi va turli ekranlarga moslashishni soddalashtiradi.

Xulosa

  • UIKit — iOS, iPadOS va macOS da imperativ yondashuv bilan interfeyslar qurish uchun asosiy Apple freymvorki.
  • UIView renderlash va teginishlarni boshqaradi; uning grafik qismini alohida ipda ishlaydigan CALayer qatlami qayta ishlaydi.
  • UIViewController qat'iy hayotiy siklidan o'tadi: viewDidLoad dan xotirani bo'shatishgacha, har bir bosqichni o'zgartirish imkoniyati bilan.
  • Auto Layout qattiq koordinatalarni cheklovlar tizimi bilan almashtiradi, interfeysni istalgan ekran va orientatsiyaga moslashtiradi.
  • UITableView va UICollectionView reuse identifier bilan katta ro'yxatlarda ishlashni ta'minlaydi va zamonaviy Compositional Layout ni qo'llab-quvvatlaydi.
  • UIStackView ko'rinishlar ketma-ketligining tartibini soddalashtiradi, cheklov kodini 60–80% qisqartiradi.
  • Yangi loyihalar uchun Apple SwiftUI ni tavsiya qiladi, ammo UIKit eski iOS versiyalarini qo'llab-quvvatlash va murakkab moslashtirilgan interfeyslar uchun dolzarb bo'lib qolmoqda.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing