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 — 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.
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 ü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.
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 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.
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.
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.
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.
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 — 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.
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.
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.
UITableView və UICollectionView — 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: numberOfRowsInSection və cellForRowAt. 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.
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ş textLabel və detailTextLabel-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.
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.
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.
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
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.
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.
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.
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 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ə
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.
Həm də oxuyun