Middle
Comment peut-on déterminer si un utilisateur a cliqué sur une couche (layer) ?
sobes.tech IA
Réponse de l'IA
Vous pouvez utiliser le test de clic : déterminer sur quelle couche le contact a eu lieu. Core Animation fournit deux méthodes pour cela :
-
hitTest(_:):- Vérifie si le point se trouve à l’intérieur des limites de la couche ou de l’une de ses sous-couches.
- Retourne la sous-couche la plus profonde (ou la couche elle-même) contenant le point.
- Prend en compte
isHidden = true.
-
contains(_:):- Vérifie uniquement si le point est à l’intérieur des limites de la couche elle-même.
- Ne considère pas la hiérarchie des sous-couches.
- Ne prend pas en compte
isHidden.
Généralement, on utilise hitTest, car il est plus précis pour déterminer l’interactivité.
Exemple d’utilisation de hitTest dans un gestionnaire de touches :
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let locationInView = touch.location(in: view)
// Convertir le point des coordonnées de la vue en coordonnées de la couche
let locationInLayer = myLayer.convert(locationInView, from: view.layer)
// Effectuer le test de clic
if let hitLayer = myLayer.hitTest(locationInLayer) {
if hitLayer === myLayer {
// Touché précisément myLayer
print("Touché myLayer")
} else {
// Touché une sous-couche dans myLayer
print("Touché une sous-couche dans myLayer")
// L’identification de la sous-couche peut nécessiter des vérifications supplémentaires
}
} else {
// Touché en dehors de myLayer et ses sous-couches
print("Touché en dehors de myLayer")
}
}
Points importants :
- Les coordonnées du point de contact (
location(in:)) sont toujours liées àUIView. Il faut les convertir dans le système de coordonnées de la couche (convert(_, from:)ouconvert(_, to:)). - La méthode
hitTest(_:)fonctionne avec des points dans le système de coordonnées de la couche appelante (myLayer.hitTest(locationInLayer)). - Si la couche est invisible (
alpha = 0ouisHidden = true),hitTestrenverranil.containsrenverratruesi le point est à l’intérieur des limites, en ignorant la visibilité. - Pour des hiérarchies complexes de couches, il peut être nécessaire de faire une recherche récursive ou de vérifier la couche retournée par
hitLayer.