Middle
Wie kann man feststellen, ob ein Benutzer auf eine Ebene (Layer) geklickt hat?
sobes.tech KI
Antwort von AI
Sie können den Hit-Test verwenden: Bestimmen, auf welcher Ebene die Berührung genau stattgefunden hat. Core Animation bietet dafür zwei Methoden:
-
hitTest(_:):- Prüft, ob der Punkt innerhalb der Grenzen der Ebene oder einer ihrer Unterebenen liegt.
- Gibt die tiefste Unterebene (oder die Ebene selbst) zurück, die den Punkt enthält.
- Berücksichtigt
isHidden = true.
-
contains(_:):- Prüft nur, ob der Punkt innerhalb der Grenzen der Ebene liegt.
- Berücksichtigt die Hierarchie der Unterebenen nicht.
- Berücksichtigt
isHiddennicht.
Normalerweise wird hitTest verwendet, da es genauer ist, um die Interaktivität zu bestimmen.
Beispiel für die Verwendung von hitTest in einem Touch-Handler:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let locationInView = touch.location(in: view)
// Konvertieren Sie den Punkt von den Koordinaten der Ansicht in die Koordinaten der Ebene
let locationInLayer = myLayer.convert(locationInView, from: view.layer)
// Führen Sie den Hit-Test durch
if let hitLayer = myLayer.hitTest(locationInLayer) {
if hitLayer === myLayer {
// Genau myLayer berührt
print("myLayer wurde berührt")
} else {
// Unterebene innerhalb von myLayer berührt
print("Unterebene innerhalb von myLayer wurde berührt")
// Die Identifikation der Unterebene kann zusätzliche Überprüfungen erfordern
}
} else {
// Außerhalb von myLayer und seinen Unterebenen berührt
print("Außerhalb von myLayer berührt")
}
}
Wichtige Punkte:
- Die Koordinaten des Berührungspunkts (
location(in:)) sind immer anUIViewgebunden. Sie müssen in das Koordinatensystem der Ebene (convert(_, from:)oderconvert(_, to:)) umgewandelt werden. - Die Methode
hitTest(_:)arbeitet mit Punkten im Koordinatensystem der aufrufenden Ebene (myLayer.hitTest(locationInLayer)). - Wenn die Ebene unsichtbar ist (
alpha = 0oderisHidden = true), gibthitTestnilzurück.containsgibttruezurück, wenn der Punkt innerhalb der Grenzen liegt, unabhängig von der Sichtbarkeit. - Für komplexe Hierarchien von Ebenen kann eine rekursive Suche oder die Überprüfung der zurückgegebenen
hitLayererforderlich sein.