Middle
Was passiert im System, wenn wir auf den Bildschirm tippen?
sobes.tech KI
Antwort von AI
Wenn ein Benutzer den Bildschirm eines iOS-Geräts berührt, passiert Folgendes:
- Ereignis erfassen: Die Hardware (Touch-Controller) registriert die Berührung und generiert ein Ereignis.
- Ereignisverarbeitung in IOKit: Der Geräte-Treiber in IOKit erhält die Berührungsinformationen (Koordinaten, Druckstärke usw.).
- Senden des Ereignisses an SpringBoard: IOKit überträgt das Ereignis an den Systemprozess SpringBoard.
- Ereignis-Routing: SpringBoard bestimmt die aktive Anwendung und sendet das Ereignis per IPC (Inter-Process Communication) an diese Anwendung.
- Ereignisempfang in UIKit/SwiftUI: Die Anwendung empfängt das Ereignis durch das Framework (UIKit oder SwiftUI).
- Hinzufügen des Ereignisses zur Warteschlange: Das Ereignis wird in die Ereignisverarbeitungswarteschlange der Anwendung eingefügt.
- Ereignisempfang durch die Anwendung: Der Haupt-Loop der Anwendung (Run Loop) extrahiert das Ereignis aus der Warteschlange.
- Ereignisverarbeitung durch UIResponder: Das Ereignis wird an das Objekt
UIEventübergeben. UIKit startet den Prozess der Ereigniszustellung, meist beginnend beiUIWindow. - hitTest-Überprüfung: Das System bestimmt die oberste interaktive
UIView(oder deren Äquivalent in SwiftUI), die unter dem Berührungspunkt liegt, mittelshitTest(_:with:). Diese Methode durchläuft rekursiv die Hierarchie der Views, prüft, ob der Punkt innerhalb der Grenzen liegt und ob die ViewuserInteractionEnabledaktiviert hat. - Ereigniszustellung: Das Ereignis wird an die gefundene View übergeben. Wenn die View das Ereignis nicht verarbeitet (z.B. kein entsprechendes Gesture hat oder
touchesBegan:withEvent:implementiert, aber nicht verarbeitet, oder wennhitTestnil zurückgibt), wird das Ereignis an den nächsten Responder in der Kette (Responder Chain) weitergeleitet, meist an den Superview oder View-Controller. - Verarbeitung von Gesten oder Touch-Methoden: Wenn die View
UIGestureRecognizer-Erkenner hat, erhalten diese das Ereignis zuerst. Wenn ein Geste erkannt wird, wird es durch eine Objective-C-Aktion oder Swift-Funktion verarbeitet. Wenn Gesten das Ereignis nicht verarbeiten oder keine vorhanden sind, wird das Ereignis an die Touch-Methoden der View (z.B.touchesBegan(_:with:),touchesMoved(_:with:),touchesEnded(_:with:),touchesCancelled(_:with:)) weitergeleitet. - Ausführung der Logik: Im Geste-Handler oder Touch-Methoden wird die benutzerdefinierte Logik ausgeführt (z.B. UI-Zustand ändern, Navigation, Aktion ausführen).
- UI-Aktualisierung: Wenn die Logik Änderungen an der UI bewirkt, sendet das Framework eine Anforderung zur Neuzeichnung (falls notwendig).
Hier ein Beispiel für eine stark vereinfachte Touch-Handling-Logik in einem Button-Handler:
// Innerhalb der Klasse ViewController oder eines anderen UIResponder
@IBAction func buttonTapped(_ sender: Any) {
// Logik, die beim Drücken des Buttons ausgeführt wird
print("Button gedrückt!")
}
Beispiel für die Verwendung von touchesBegan (weniger üblich für einfache Taps):
// In einer benutzerdefinierten UIView-Klasse
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// Erste Berührung erhalten
guard let touch = touches.first else { return }
// Berührungsort in den Koordinaten der View erhalten
let location = touch.location(in: self)
print("Bildschirm berührt bei CGPoint: \(location)")
// Wenn super nicht aufgerufen wird, wird die weitere Verarbeitung in der Responder-Kette gestoppt
// super.touchesBegan(touches, with: event)
}