Sobes.tech
Middle

Wat gebeurt er in het systeem wanneer we op het scherm drukken?

sobes.tech AI

Antwoord van AI

Wanneer een gebruiker op het scherm van een iOS-apparaat tikt, gebeurt het volgende:

  1. Vastleggen van het evenement: De hardware (touch controller) registreert de aanraking en genereert een evenement.
  2. Verwerking van het evenement in IOKit: De apparaatstuurprogramma in IOKit ontvangt de informatie over de aanraking (coördinaten, druksterkte, etc.).
  3. Verzending van het evenement naar SpringBoard: IOKit stuurt het evenement door naar het systeemproces SpringBoard.
  4. Routing van het evenement: SpringBoard bepaalt de actieve applicatie en stuurt het evenement via IPC (Inter-Process Communication) naar die applicatie.
  5. Ontvangst van het evenement in UIKit/SwiftUI: De applicatie ontvangt het evenement via het framework (UIKit of SwiftUI).
  6. Toevoegen van het evenement aan de wachtrij: Het evenement wordt toegevoegd aan de verwerkingswachtrij van de applicatie.
  7. Ontvangst van het evenement door de applicatie: De hoofdloop van de applicatie (Run Loop) haalt het evenement uit de wachtrij.
  8. Verwerking van het evenement via UIResponder: Het evenement wordt doorgegeven aan het object UIEvent. UIKit start het proces van het afleveren van het evenement, meestal beginnend bij UIWindow.
  9. hitTest controle: Het systeem bepaalt de meest bovenste en interactieve UIView (of het equivalente in SwiftUI) onder het punt van aanraking, met behulp van de methode hitTest(_:with:). Deze methode doorloopt recursief de hiërarchie van views, controleert of het punt binnen de grenzen ligt en of de view userInteractionEnabled heeft.
  10. Levering van het evenement: Het evenement wordt afgeleverd aan de gevonden view. Als de view het evenement niet verwerkt (bijvoorbeeld, geen bijpassende gesture of touchesBegan:withEvent: implementeert, maar niet verwerkt, of als de methode nil retourneert in hitTest), wordt het evenement doorgestuurd naar de volgende responder in de keten (responder chain), meestal naar de superview of view controller.
  11. Verwerking van gestures of touch-methoden: Als de view recognizers voor gestures (UIGestureRecognizer) heeft, ontvangen deze het evenement als eerste. Als een gesture wordt herkend, wordt deze afgehandeld door een objc-actie of Swift-functie. Als gestures het evenement niet verwerken of ontbreken, wordt het doorgestuurd naar de touch-methoden van de view (bijvoorbeeld, touchesBegan(_:with:), touchesMoved(_:with:), touchesEnded(_:with:), touchesCancelled(_:with:)).
  12. Uitvoering van de logica: In de gesture-handler of touch-methode wordt de aangepaste logica uitgevoerd (bijvoorbeeld, UI-status wijzigen, navigatie, actie uitvoeren).
  13. UI-update: Als de logica wijzigingen in de UI veroorzaakt, stuurt het framework een verzoek tot hertekenen (indien nodig).

Hier is een voorbeeld van een sterk vereenvoudigde touch-verwerkingslogica in een knop-handler:

// In de klasse ViewController of een andere UIResponder
@IBAction func buttonTapped(_ sender: Any) {
    // Logica die wordt uitgevoerd bij het indrukken van de knop
    print("Knop ingedrukt!")
}

Voorbeeld van gebruik van touchesBegan (minder gebruikelijk voor eenvoudige tikken):

// In een aangepaste UIView die erft van UIView
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Eerste aanraking verkrijgen
    guard let touch = touches.first else { return }

    // Aanrakingpunt in de coördinaten van de view verkrijgen
    let location = touch.location(in: self)

    print("Scherm aangeraakt op CGPoint: \(location)")

    // Als super niet wordt aangeroepen, stopt de verdere verwerking in de responder chain
    // super.touchesBegan(touches, with: event)
}