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:
- Vastleggen van het evenement: De hardware (touch controller) registreert de aanraking en genereert een evenement.
- Verwerking van het evenement in IOKit: De apparaatstuurprogramma in IOKit ontvangt de informatie over de aanraking (coördinaten, druksterkte, etc.).
- Verzending van het evenement naar SpringBoard: IOKit stuurt het evenement door naar het systeemproces SpringBoard.
- Routing van het evenement: SpringBoard bepaalt de actieve applicatie en stuurt het evenement via IPC (Inter-Process Communication) naar die applicatie.
- Ontvangst van het evenement in UIKit/SwiftUI: De applicatie ontvangt het evenement via het framework (UIKit of SwiftUI).
- Toevoegen van het evenement aan de wachtrij: Het evenement wordt toegevoegd aan de verwerkingswachtrij van de applicatie.
- Ontvangst van het evenement door de applicatie: De hoofdloop van de applicatie (Run Loop) haalt het evenement uit de wachtrij.
- 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 bijUIWindow. - 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 methodehitTest(_:with:). Deze methode doorloopt recursief de hiërarchie van views, controleert of het punt binnen de grenzen ligt en of de viewuserInteractionEnabledheeft. - 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 inhitTest), wordt het evenement doorgestuurd naar de volgende responder in de keten (responder chain), meestal naar de superview of view controller. - 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:)). - Uitvoering van de logica: In de gesture-handler of touch-methode wordt de aangepaste logica uitgevoerd (bijvoorbeeld, UI-status wijzigen, navigatie, actie uitvoeren).
- 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)
}