UIKit — τι είναι, βασικές έννοιες και αρχιτεκτονική

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-30 Χρόνος ανάγνωσης: 10 λεπ

Το UIKit είναι ένα πλαίσιο για τη δημιουργία γραφικών διεπαφών σε εφαρμογές iOS και macOS. Η συλλογή περιλαμβάνει UIView, UIViewController, στοιχεία ελέγχου και το σύστημα Auto Layout, επιτρέποντας τη δημιουργία προσαρμοστικών και διαδραστικών οθονών. Σύμφωνα με το Apple Developer Documentation (2025), το UIKit περιέχει πάνω από 200 κλάσεις για εργασία με παράθυρα, προβολές, κινούμενα σχέδια, χειρονομίες και κείμενο — αυτή είναι η βάση όλων των εφαρμογών για iPhone και iPad.

Κύρια σημεία

  • UIKit — είναι το πλαίσιο της Apple για τη δημιουργία διεπαφών σε iOS, iPadOS και macOS με προστακτική προσέγγιση στη διαχείριση προβολών.
  • UIView — η βασική κλάση για όλα τα οπτικά στοιχεία: κουμπιά, πεδία κειμένου, εικόνες και δοχεία.
  • UIViewController διαχειρίζεται τον κύκλο ζωής της οθόνης: από τη φόρτωση της προβολής έως την απελευθέρωση μνήμης.
  • Auto Layout περιγράφει τη θέση των στοιχείων μέσω ενός συστήματος περιορισμών, προσαρμόζοντας τη διεπαφή σε διαφορετικά μεγέθη οθόνης.
  • Εκπρόσωποι και dataSource — το βασικό μοτίβο για πίνακες και συλλογές, διαχωρίζοντας τα δεδομένα και την εμφάνισή τους.

Τι είναι το UIKit;

UIKit — είναι ένα πλαίσιο από την Apple που παρέχει κλάσεις για τη δημιουργία και διαχείριση διεπαφής χρήστη σε iOS, iPadOS και macOS (μέσω Mac Catalyst). Λειτουργεί πάνω από τα Core Animation, Core Graphics και Quartz Core, αφαιρώντας τη χαμηλού επιπέδου απόδοση σε αντικείμενα υψηλού επιπέδου — κουμπιά, ετικέτες, εικόνες και δοχεία. Το UIKit εμφανίστηκε μαζί με το iPhone OS 1 το 2007 και παραμένει το κύριο πλαίσιο για ανάπτυξη iOS μαζί με το SwiftUI.

Το πλαίσιο ακολουθεί προστακτική προσέγγιση: ο προγραμματιστής δημιουργεί στιγμιότυπα των κλάσεων UIButton, UILabel, UIImageView, ορίζει τις ιδιότητές τους (χρώμα, γραμματοσειρά, θέση) και τα προσθέτει στην ιεραρχία προβολών μέσω addSubview. Κάθε αλλαγή στη διεπαφή γίνεται ρητά — χωρίς μαγικές ενημερώσεις στο παρασκήνιο. Αυτό διαφοροποιεί το UIKit από δηλωτικά πλαίσια όπως το SwiftUI, όπου η περιγραφή της κατάστασης σχεδιάζει αυτόματα ξανά τη διεπαφή.

Κύριες κλάσεις του UIKit

Το πλαίσιο περιλαμβάνει πολλές κατηγορίες κλάσεων. UIView — το βασικό στοιχείο από το οποίο κληρονομούν όλα τα οπτικά στοιχεία. UIWindow — το δοχείο υψηλότερου επιπέδου μέσω του οποίου οι προβολές εμφανίζονται στην οθόνη. UIViewController — ο ελεγκτής που διαχειρίζεται ένα σύνολο προβολών και αντιδρά σε περιστροφές οθόνης, εμφάνιση πληκτρολογίου και ειδοποιήσεις συστήματος. UIApplication — το σημείο εισόδου που επεξεργάζεται συμβάντα αφής και πατημάτων κουμπιών.

Για κείμενο χρησιμοποιούνται UILabel (στατικό κείμενο), UITextField (μονό γραμμής εισαγωγή), UITextView (πολλαπλών γραμμών εισαγωγή). Για κουμπιά — UIButton, συμπεριλαμβανομένων συστημικών, προσαρμοσμένων και με εικονογραφία SF Symbols. Για πλοήγηση — UINavigationController, UITabBarController και UISplitViewController. Συνολικά, το UIKit περιέχει πάνω από 200 δημόσιες κλάσεις.

Αρχιτεκτονική UIKit: επίπεδα και ιεραρχία προβολών

Η αρχιτεκτονική UIKit βασίζεται σε επίπεδα: κάθε επίπεδο είναι υπεύθυνο για τη δική του πτυχή εμφάνισης. Στο χαμηλότερο επίπεδο βρίσκεται το Core Graphics — η μηχανή απόδοσης διαδρομών, κειμένου και εικόνων. Πάνω — το Core Animation, που διαχειρίζεται τη σύνθεση επιπέδων (CALayer) και κινούμενα σχέδια μεταξύ καταστάσεων. Το UIKit χτίζει από πάνω τους ένα αντικειμενοστραφές API: UIView, UIViewController και UIResponder.

Κάθε εφαρμογή έχει μια ιεραρχία προβολών (view hierarchy) — ένα δέντρο με ρίζα το UIWindow. Από κάτω — ο ριζικός UIViewController, η προβολή του και εσωτερικά — ένθετα subview. Τα συμβάντα αφής διαδίδονται κατά μήκος της αλυσίδας responder chain: από την πιο ένθετη προβολή στους γονείς και περαιτέρω στο UIApplication. Αν κανένα αντικείμενο δεν επεξεργάστηκε το άγγιγμα, αγνοείται.

UIView και CALayer

Κάθε UIView περιέχει ένα επίπεδο CALayer υπεύθυνο για την απόδοση pixel στην οθόνη. Η προβολή διαχειρίζεται αφές και προσβασιμότητα, το επίπεδο — γραφικά: shadow, cornerRadius, border, transform. Ο διαχωρισμός επιτρέπει τη μεταφορά βαρέων γραφικών σε ξεχωριστό νήμα (render server), χωρίς να μπλοκάρει το main thread. Η Apple συνιστά άμεση εργασία με CALayer αν χρειάζονται πάνω από 200 προβολές στην οθόνη — αυτό μειώνει το φορτίο CPU.

Αλυσίδα Responder σε λεπτομέρεια

Η αλυσίδα responder ξεκινά από το αντικείμενο που λαμβάνει πρώτο το συμβάν αφής. Αν δεν επεξεργάζεται το συμβάν (η μέθοδος touchesBegan δεν έχει παρακαμφθεί), το συμβάν μεταβιβάζεται στον επόμενο responder στην αλυσίδα: next, superview, next responder, UIViewController, UIWindow, UIApplication, App Delegate. Αυτό επιτρέπει την υποκλοπή καθολικών χειρονομιών και συμβάντων πληκτρολογίου σε επίπεδο σκηνής χωρίς προσθήκη χειριστή σε κάθε προβολή.

Κύκλος ζωής του UIViewController

Κάθε UIViewController περνά από μια αυστηρά καθορισμένη ακολουθία συμβάντων. Ο κύκλος ζωής περιλαμβάνει φάσεις: αρχικοποίηση, φόρτωση προβολής, εμφάνιση στην οθόνη, ενημέρωση διάταξης κατά περιστροφή, απόκρυψη, αποχώρηση από την οθόνη και απελευθέρωση μνήμης. Ο προγραμματιστής παρακάμπτει τις αντίστοιχες μεθόδους για να εκτελέσει τον κώδικά του σε κάθε στάδιο.

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 διαμορφώνεται η διεπαφή — δημιουργούνται subview, ορίζονται περιορισμοί, εγγράφονται εκπρόσωποι. Στο viewWillAppear εκτελούνται λειτουργίες πριν από την εμφάνιση: φόρτωση φρέσκων δεδομένων από το δίκτυο, ενημέρωση τιμών. viewDidDisappear — θέση για διαγραφή από ειδοποιήσεις και καθαρισμό προσωρινών δεδομένων. Η κλήση super είναι υποχρεωτική σε όλες τις παρακάμψεις, διαφορετικά η αλυσίδα συμβάντων διακόπτεται.

Διαχείριση μνήμης και viewDidUnload

Σε παλαιότερες εκδόσεις iOS υπήρχε η μέθοδος viewDidUnload, που καλούνταν σε έλλειψη μνήμης. Από το iOS 6 η μέθοδος αφαιρέθηκε — τώρα το UIKit αυτόματα εκφορτώνει τις προβολές του ελεγκτή όταν δεν είναι ορατές. Ο προγραμματιστής χρειάζεται μόνο να δηλώσει όλες τις αναφορές σε προβολές ως weak, ώστε το ARC να μπορεί να απελευθερώσει σωστά τη μνήμη όταν λάβει προειδοποίηση από το σύστημα.

Μεταβάσεις μεταξύ ελεγκτών

Το UIKit υποστηρίζει δύο τύπους μεταβάσεων: segue (μέσω Storyboard) και προγραμματιστική πλοήγηση μέσω UINavigationController. Η προγραμματιστική μετάβαση μοιάζει έτσι: navigationController?.pushViewController(detailVC, animated: true). Σε αυτή την περίπτωση, ο κύκλος ζωής του detailVC προχωρά κανονικά — το viewDidLoad καλείται μία φορά, το viewWillAppear — κάθε φορά κατά την εμφάνιση.

Auto Layout και προσαρμοστική διάταξη

Auto Layout — είναι ένα σύστημα τοποθέτησης στοιχείων βασισμένο σε μαθηματικές σχέσεις (περιορισμούς). Αντί για σταθερές συντεταγμένες X και Y, ο προγραμματιστής περιγράφει κανόνες: “το κουμπί βρίσκεται δεξιά της ετικέτας με απόσταση 16pt” ή “η προβολή εκτείνεται σε όλο το πλάτος της οθόνης με περιθώρια 20pt αριστερά και δεξιά”. Το σύστημα λύνει το προκύπτον σύστημα εξισώσεων κατά το runtime, προσαρμόζοντας τη διεπαφή σε οποιοδήποτε μέγεθος οθόνης.

Οι περιορισμοί μπορούν να οριστούν στο Interface Builder (μέσω drag-and-drop) ή προγραμματιστικά σε Swift. Κάθε περιορισμός είναι ένα στιγμιότυπο της κλάσης NSLayoutConstraint με παραμέτρους: firstItem, firstAttribute, relation, secondItem, secondAttribute, multiplier, constant. Οι περιορισμοί ενεργοποιούνται μέσω isActive = true ή μαζικά μέσω NSLayoutConstraint.activate().

Safe Area και Layout Margins

Με το iPhone X (2017) η Apple εισήγαγε το Safe Area — την περιοχή οθόνης ελεύθερη από notch, στρογγυλεμένες γωνίες και δείκτη home bar. Οι περιορισμοί πρέπει να συνδέονται στο view.safeAreaLayoutGuide, όχι στο view. Layout Margins προσθέτουν εσωτερικά περιθώρια προβολής, προεπιλεγμένα 8pt ή 16pt ανάλογα με το πλαίσιο. Η χρήση safeAreaLayoutGuide εγγυάται σωστή εμφάνιση σε όλες τις γενιές iPhone και iPad.

Κινούμενα σχέδια περιορισμών

Το Auto Layout υποστηρίζει κινούμενα σχέδια μέσω αλλαγής των σταθερών των περιορισμών. Αρκεί να ενημερώσετε το constant του περιορισμού και να καλέσετε το UIView.animate με layoutIfNeeded μέσα στο μπλοκ κινούμενου σχεδίου. Το σύστημα υπολογίζει ομαλά εκ νέου τη θέση όλων των προβολών στην ιεραρχία. Αυτή η τεχνική χρησιμοποιείται για αναδιπλούμενα μπλοκ, προσαρμοστικό πάνελ πληκτρολογίου και αλλαγή προσανατολισμού οθόνης.

Εργασία με πίνακες και συλλογές

UITableView και UICollectionView — δύο ισχυρά εργαλεία του UIKit για εμφάνιση λιστών και πλεγμάτων. Το UITableView είναι κατάλληλο για κάθετες λίστες με μία στήλη (συνομιλία, ρυθμίσεις, ροή ειδήσεων). Το UICollectionView — για πλέγματα, οριζόντιες λίστες, καρουζέλ και προσαρμοσμένες διατάξεις (γκαλερί, προϊόντα, ημερολόγιο). Και οι δύο κλάσεις χρησιμοποιούν το μοτίβο εκπροσώπησης για διαχωρισμό δεδομένων και εμφάνισης.

Πηγή δεδομένων είναι το πρωτόκολλο UITableViewDataSource με υποχρεωτικές μεθόδους numberOfRowsInSection και cellForRowAt. Ο εκπρόσωπος UITableViewDelegate επεξεργάζεται πατήματα κελιών, ύψος γραμμών και συμβάντα κύλισης. Ο μηχανισμός reuse identifier επαναχρησιμοποιεί κελιά που έχουν βγει από την οθόνη, κάτι που είναι κρίσιμο για την απόδοση σε μεγάλες λίστες.

swift
class ContactsViewController: UITableViewController {

    private let contacts = ["Άννα", "Μπόρις", "Βίκτωρ"]

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

Το παράδειγμα δείχνει έναν ελάχιστο ελεγκτή για εμφάνιση μιας συστοιχίας συμβολοσειρών. Το κελί διαμορφώνεται μέσω UIListContentConfiguration — σύγχρονου API (iOS 14+) που αντικατέστησε τα παρωχημένα textLabel και detailTextLabel. Η εγγραφή της κλάσης κελιού στο viewDidLoad είναι υποχρεωτική, διαφορετικά η εφαρμογή θα καταρρεύσει με εξαίρεση κατά το runtime.

UICollectionView και Compositional Layout

Από το iOS 13, η Apple συνιστά το UICollectionViewCompositionalLayout για τη δημιουργία σύνθετων διατάξεων. Ο προγραμματιστής περιγράφει το τμήμα, την ομάδα, το στοιχείο και τα μεγέθη τους δηλωτικά — λαμβάνει ένα πλέγμα με αυθαίρετη γεωμετρία: κορδέλα, πλέγμα 2x2, καρουζέλ, διακόσμηση. Το Compositional Layout αντικατέστησε το παρωχημένο UICollectionViewFlowLayout σε όλα τα νέα έργα. Σε συνδυασμό με το DiffableDataSource, η ενημέρωση της συλλογής μειώνεται σε μία κλήση apply(snapshot) και η κίνηση των αλλαγών εκτελείται αυτόματα.

Παραδείγματα κώδικα σε Swift

Παρακάτω υπάρχουν δύο πρακτικά παραδείγματα χρήσης του UIKit σε πραγματικές εργασίες: δημιουργία προσαρμοσμένης προβολής με σκιά και στρογγυλοποίηση, καθώς και χειρισμός χειρονομίας σύρσιμου για διαγραφή στοιχείου από λίστα.

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 προσθέτει σκιά και στρογγυλοποίηση σε οποιαδήποτε προβολή — χρήσιμο για κάρτες προϊόντων, προφίλ και ειδοποιήσεις. Η μέθοδος handleSwipe με κινούμενο σχέδιο διαγράφει το στοιχείο αν ο χρήστης σύρει προς τα δεξιά. Ο χειριστής προστίθεται στην προβολή μέσω addGestureRecognizer με διαμόρφωση UISwipeGestureRecognizer(direction: .right). Η ρύθμιση masksToBounds = false είναι σημαντική ώστε η σκιά να μην κόβεται από τα όρια της προβολής.

Για πιο σύνθετες διεπαφές, χρησιμοποιήστε το UIStackView — ένα δοχείο που κατανέμει αυτόματα ένθετες προβολές οριζόντια ή κάθετα. Το Stack View απλοποιεί τη διάταξη: δεν χρειάζεται να ορίσετε περιορισμούς για κάθε στοιχείο, αρκεί ένας περιορισμός για το ίδιο το stack.

Συχνές ερωτήσεις

Ποια είναι η διαφορά μεταξύ frame και bounds στο UIView;

Frame — ορθογώνιο στις συντεταγμένες του superview (θέση + μέγεθος). Bounds — ορθογώνιο στις δικές του συντεταγμένες της προβολής (πάντα ξεκινά από 0,0). Το Frame αλλάζει κατά rotate και scale, το bounds — όχι.

Πώς να απελευθερώσω μνήμη από αχρησιμοποίητες προβολές;

Το UIKit αυτόματα εκφορτώνει προβολές κρυφών ελεγκτών. Ο προγραμματιστής χρειάζεται μόνο να δηλώσει τις ιδιότητες προβολών ως weak var ώστε το ARC να μπορεί να απελευθερώσει μνήμη όταν λάβει προειδοποίηση από το σύστημα.

Αξίζει να χρησιμοποιήσω Storyboard το 2026;

Για νέα έργα, η Apple συνιστά SwiftUI. Αν το έργο είναι σε UIKit — χρησιμοποιήστε XIB για μεμονωμένες οθόνες ή προγραμματιστική διάταξη μέσω SnapKit. Το Storyboard δημιουργεί συγκρούσεις συγχώνευσης και επιβραδύνει το build.

Πώς να υλοποιήσω σκοτεινό θέμα στο UIKit;

Χρησιμοποιήστε UIColor με υποστήριξη traitCollection: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Ενεργοποιήστε το Dark Mode στο Info.plist με το κλειδί UIUserInterfaceStyle.

Σε τι είναι καλύτερο το UIStackView από τους χειροκίνητους περιορισμούς;

UIStackView υπολογίζει αυτόματα θέσεις και μεγέθη ένθετων προβολών βάσει alignment, distribution και spacing. Μειώνει τον κώδικα περιορισμών κατά 60–80% και απλοποιεί την προσαρμογή σε διαφορετικές οθόνες.

Περίληψη

  • UIKit — το κύριο πλαίσιο της Apple για δημιουργία διεπαφών iOS, iPadOS και macOS με προστακτική προσέγγιση.
  • UIView διαχειρίζεται απόδοση και αφές; το γραφικό του μέρος επεξεργάζεται από το επίπεδο CALayer που λειτουργεί σε ξεχωριστό νήμα.
  • UIViewController περνά από αυστηρό κύκλο ζωής: από το viewDidLoad έως την απελευθέρωση μνήμης με δυνατότητα παράκαμψης κάθε σταδίου.
  • Auto Layout αντικαθιστά σταθερές συντεταγμένες με σύστημα περιορισμών, προσαρμόζοντας τη διεπαφή σε οποιαδήποτε οθόνη και προσανατολισμό.
  • UITableView και UICollectionView με reuse identifier εξασφαλίζουν απόδοση σε μεγάλες λίστες και υποστηρίζουν μοντέρνο Compositional Layout.
  • UIStackView απλοποιεί τη διάταξη ακολουθιών προβολών, μειώνοντας τον κώδικα περιορισμών κατά 60–80%.
  • Για νέα έργα, η Apple συνιστά SwiftUI, αλλά το UIKit παραμένει σχετικό για υποστήριξη παλαιότερων iOS και σύνθετων προσαρμοσμένων διεπαφών.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης