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 — 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.
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 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.
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 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.
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.
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.
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.
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 — 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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
UIColor dan traitCollection qo'llab-quvvatlashi bilan foydalaning: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Dark Mode ni Info.plist da UIUserInterfaceStyle kaliti bilan faollashtiring.
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
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.