UIKit
UIKit – biblioteka programistyczna (framework) firmy Apple, która dostarcza zestaw gotowych komponentów interfejsu użytkownika oraz API do ich obsługi w systemach iOS, iPadOS, macOS (od wersji Catalyst) oraz tvOS. Dzięki UIKit programiści mogą tworzyć aplikacje o spójnym wyglądzie i zachowaniu, zgodne z wytycznymi Human Interface Guidelines (HIG) Apple.
Historia
Biblioteka została wprowadzona po raz pierwszy w 2009 roku wraz z premierą iPhone'a i systemem iPhone OS 1. Od tego czasu UIKit ewoluował, wprowadzając wsparcie dla kolejnych urządzeń i wersji systemu:
- 2010 – wprowadzenie
UICollectionVieww iOS 4. - 2011 – udostępnienie
Auto Layoutw Xcode 4.2. - 2014 – pojawienie się
Swift, nowego języka programowania, który od tej pory jest dominującym językiem przy tworzeniu aplikacji z użyciem UIKit. - 2019 – wprowadzenie
SwiftUIjako alternatywy dla UIKit, ale jednocześnie zachowanie pełnej kompatybilności pomiędzy oboma frameworkami.
Architektura i podstawowe pojęcia
UIKit opiera się na kilku kluczowych elementach:
- UIView
- Podstawowy obiekt reprezentujący prostokątny obszar ekranu. Wszystkie widoki graficzne, kontrolki i kontenery dziedziczą po tej klasie.
- UIViewController
- Obiekt zarządzający hierarchią widoków oraz cyklem życia użytkownika w ramach jednej sceny aplikacji.
- UIResponder
- Klasa bazowa dla obiektów obsługujących zdarzenia dotykowe, gesty i inne interakcje użytkownika.
- Auto Layout
- System reguł opisujących zależności pomiędzy elementami interfejsu, umożliwiający dynamiczne dostosowywanie układu do różnych rozmiarów ekranu.
- Interface Builder
- Graficzne narzędzie w Xcode umożliwiające projektowanie interfejsu przy użyciu storyboardów i plików NIB/XIB.
Najważniejsze komponenty
UIKit dostarcza szeroką gamę gotowych kontrolek, które można wykorzystać w aplikacjach:
- UIButton – przycisk wywołujący akcję.
- UILabel – wyświetlanie statycznego tekstu.
- UIImageView – prezentacja obrazów.
- UITableView – lista z możliwością przewijania i podziału na sekcje.
- UICollectionView – siatka elementów o dowolnym układzie.
- UITextField oraz UITextView – pola wprowadzania tekstu.
- UIScrollView – kontener umożliwiający przewijanie zawartości.
- UINavigationController – zarządzanie stosami widoków w stylu „back stack”.
- UITabBarController – nawigacja pomiędzy podstawowymi sekcjami aplikacji przy użyciu paska zakładek.
Cykl życia aplikacji i widoków
W UIKit istnieje jasno określony cykl życia obiektów, co ułatwia kontrolę nad zasobami i stanem UI:
loadView()– tworzenie podstawowego widoku kontrolera.viewDidLoad()– wykonywane po załadowaniu widoku; miejsce na początkową konfigurację.viewWillAppear(_:)orazviewDidAppear(_:)– wywoływane przed i po pojawieniu się widoku na ekranie.viewWillDisappear(_:)orazviewDidDisappear(_:)– wywoływane przed i po usunięciu widoku z ekranu.
Integracja z innymi technologiami Apple
UIKit współpracuje z wieloma innymi frameworkami:
- Core Animation – animacje warstw (CALayer) używane przez UIKit do płynnych przejść.
- Core Graphics – rysowanie wektorowe i bitmapowe.
- Core Data – persystencja danych, często wykorzystywana w połączeniu z kontrolkami tabelarycznymi.
- Combine – reaktywny framework, którego strumienie można łączyć z zdarzeniami UI.
- SwiftUI – nowoczesny deklaratywny język UI; można go mieszać z UIKit przy pomocy
UIHostingController.
Przykładowy kod
import UIKit
class MyViewController: UIViewController {
private let button: UIButton = {
let b = UIButton(type: .system)
b.setTitle("Kliknij mnie", for: .normal)
b.translatesAutoresizingMaskIntoConstraints = false
return b
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(button)
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
}
@objc private func buttonTapped() {
let alert = UIAlertController(title: "Uwaga",
message: "Przycisk został kliknięty.",
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
present(alert, animated: true)
}
}
Zastosowania i znaczenie
UIKit jest podstawą praktycznie każdej natywnej aplikacji na platformach Apple. Dzięki temu frameworkowi deweloperzy mogą szybko prototypować interfejsy, zapewniając jednocześnie zgodność z wytycznymi HIG oraz wysoką wydajność. Jego długotrwałe wsparcie, rozbudowany ekosystem oraz kompatybilność z językiem Swift i starszym Objective‑C utrzymują UIKit w czołówce technologii mobilnych.
Porównanie z SwiftUI
Od 2019 roku Apple promuje SwiftUI jako nowoczesną alternatywę dla UIKit. Kluczowe różnice:
| Cecha | UIKit | SwiftUI |
|---|---|---|
| Paradygmat | Imperatywny (kod definiuje kolejność działań) | Deklaratywny (opis stanu UI) |
| Wsparcie systemowe | iOS 2 – obecnie, macOS 10.9 – obecnie | iOS 13 – obecnie, macOS 10.15 – obecnie |
| Learning curve | Stromy, wymaga znajomości Auto Layout, delegatów itp. |
Łatwiejszy dla nowych programistów, szczególnie w Swift. |
| Integracja z istniejącym kodem | Pełna kompatybilność z legacy code | Można mieszać przy pomocy UIHostingController i UIViewRepresentable. |
Patenty i licencja
UIKit jest własnością Apple i jest udostępniany programistom w ramach programu Apple Developer. Korzystanie z frameworku wymaga akceptacji warunków licencji Apple oraz korzystania z oficjalnych narzędzi, takich jak Xcode.
Patrząc w przyszłość
Choć SwiftUI zdobywa coraz większą popularność, UIKit pozostaje fundamentem ekosystemu aplikacji Apple. W kolejnych wersjach systemu przewiduje się dalsze udoskonalenia interfejsu API, lepszą współpracę z technologią ARKit oraz rozszerzone wsparcie dla urządzeń z procesorami Apple Silicon.