Middle
Τι συμβαίνει στο σύστημα όταν πατάμε στην οθόνη;
sobes.tech AI
Απάντηση από AI
Όταν ο χρήστης πατάει στην οθόνη μιας συσκευής iOS, συμβαίνουν τα εξής:
- Λήψη συμβάντος: Το υλικό (touch controller) καταγράφει την αφή και δημιουργεί ένα συμβάν.
- Επεξεργασία συμβάντος στο IOKit: Ο οδηγός συσκευής στο IOKit λαμβάνει πληροφορίες σχετικά με την αφή (συντεταγμένες, δύναμη πίεσης κ.λπ.).
- Αποστολή συμβάντος στο SpringBoard: Το IOKit μεταφέρει το συμβάν στη συστημική διαδικασία SpringBoard.
- Διαδρομολόγηση συμβάντος: Το SpringBoard καθορίζει την ενεργή εφαρμογή και στέλνει το συμβάν μέσω IPC (Inter-Process Communication) σε αυτήν.
- Αποδοχή συμβάντος στο UIKit/SwiftUI: Στην εφαρμογή, το συμβάν λαμβάνεται από το framework (UIKit ή SwiftUI).
- Προσθήκη συμβάντος στην ουρά: Το συμβάν προστίθεται στην ουρά επεξεργασίας συμβάντων της εφαρμογής.
- Λήψη συμβάντος από την εφαρμογή: Ο κύκλος λειτουργίας (Run Loop) της εφαρμογής αντλεί το συμβάν από την ουρά.
- Επεξεργασία συμβάντος μέσω UIResponder: Το συμβάν μεταβιβάζεται στο αντικείμενο
UIEvent. Το UIKit ξεκινά τη διαδικασία παράδοσης του συμβάντος, ξεκινώντας συνήθως από το αντικείμενοUIWindow. - Έλεγχος hitTest: Το σύστημα καθορίζει το ανώτερο διαδραστικό
UIView(ή το αντίστοιχο του στο SwiftUI) που βρίσκεται κάτω από το σημείο της αφήγησης, χρησιμοποιώντας τη μέθοδοhitTest(_:with:)(στο UIKit). Αυτή η μέθοδος διατρέχει αναδρομικά τη ιεραρχία των εμφανίσεων, ελέγχοντας αν το σημείο βρίσκεται εντός των ορίων και αν η εμφάνιση έχει ενεργή αλληλεπίδραση. - Παράδοση συμβάντος: Το συμβάν παραδίδεται στην εύρεση εμφάνιση. Αν η εμφάνιση δεν επεξεργάζεται το συμβάν (π.χ., δεν έχει κατάλληλο gesture ή υλοποιεί
touchesBegan:withEvent:αλλά δεν το επεξεργάζεται, ή αν η μέθοδος επιστρέφειnilστοhitTest), το συμβάν περνάει στον επόμενο responder στην αλυσίδα (responder chain), συνήθως στον superview ή στον ελεγκτή εμφάνισης. - Επεξεργασία gestures ή μεθόδων αφής: Αν η εμφάνιση έχει συνδεδεμένους αναγνωριστές gestures (
UIGestureRecognizer), αυτοί λαμβάνουν το συμβάν πρώτοι. Αν το gesture αναγνωριστεί, επεξεργάζεται με την αντίστοιχη ενέργεια Objective-C ή Swift. Αν τα gestures δεν επεξεργάζονται το συμβάν ή απουσιάζουν, το συμβάν περνά στις μεθόδους αφής της εμφάνισης (π.χ.,touchesBegan(_:with:),touchesMoved(_:with:),touchesEnded(_:with:),touchesCancelled(_:with:)). - Εκτέλεση λογικής: Στον χειρισμό gesture ή μέθοδο αφής, εκτελείται η προσαρμοσμένη λογική χρήστη (π.χ., αλλαγή κατάστασης UI, πλοήγηση, εκτέλεση ενέργειας).
- Ενημέρωση UI: Αν η λογική προκαλεί αλλαγές στο UI, το framework στέλνει αίτημα για ανανέωση (εάν χρειάζεται).
Ακολουθεί ένα παράδειγμα πολύ απλής λογικής επεξεργασίας αφήγησης σε χειριστή κουμπιού:
// Μέσα σε κλάση ViewController ή άλλο UIResponder
@IBAction func buttonTapped(_ sender: Any) {
// Λογική που εκτελείται κατά το πάτημα του κουμπιού
print("Το κουμπί πατήθηκε!")
}
Παράδειγμα χρήσης touchesBegan (λιγότερο συνηθισμένο για απλά πάτηματα):
// Στο προσαρμοσμένο view που κληρονομεί από UIView
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let location = touch.location(in: self)
print("Η οθόνη touched CGPoint: \(location)")
// Αν δεν καλέσετε το super, η περαιτέρω επεξεργασία στην αλυσίδα responder θα διακοπεί
// super.touchesBegan(touches, with: event)
}