Sobes.tech
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:

  1. Ereignis erfassen: Die Hardware (Touch-Controller) registriert die Berührung und generiert ein Ereignis.
  2. Ereignisverarbeitung in IOKit: Der Geräte-Treiber in IOKit erhält die Berührungsinformationen (Koordinaten, Druckstärke usw.).
  3. Senden des Ereignisses an SpringBoard: IOKit überträgt das Ereignis an den Systemprozess SpringBoard.
  4. Ereignis-Routing: SpringBoard bestimmt die aktive Anwendung und sendet das Ereignis per IPC (Inter-Process Communication) an diese Anwendung.
  5. Ereignisempfang in UIKit/SwiftUI: Die Anwendung empfängt das Ereignis durch das Framework (UIKit oder SwiftUI).
  6. Hinzufügen des Ereignisses zur Warteschlange: Das Ereignis wird in die Ereignisverarbeitungswarteschlange der Anwendung eingefügt.
  7. Ereignisempfang durch die Anwendung: Der Haupt-Loop der Anwendung (Run Loop) extrahiert das Ereignis aus der Warteschlange.
  8. Ereignisverarbeitung durch UIResponder: Das Ereignis wird an das Objekt UIEvent übergeben. UIKit startet den Prozess der Ereigniszustellung, meist beginnend bei UIWindow.
  9. hitTest-Überprüfung: Das System bestimmt die oberste interaktive UIView (oder deren Äquivalent in SwiftUI), die unter dem Berührungspunkt liegt, mittels hitTest(_:with:). Diese Methode durchläuft rekursiv die Hierarchie der Views, prüft, ob der Punkt innerhalb der Grenzen liegt und ob die View userInteractionEnabled aktiviert hat.
  10. 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 wenn hitTest nil zurückgibt), wird das Ereignis an den nächsten Responder in der Kette (Responder Chain) weitergeleitet, meist an den Superview oder View-Controller.
  11. 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.
  12. 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).
  13. 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)
}