[SwiftUI] Une alternative à la Fonction HitTest() ?

Dans le cadre d'un petit jeu, je cherche à déplacer des objets placés aléatoirement sur l'écran, pour les ranger dans des cases. Rien de compliqué à première vue, sauf que je n'arrive pas à détecter la case de destination.

Avec UIKit c'est facile, on utilise une gesture. A la fin du mouvement, on récupère la position x,y et on appelle HitTest() pour savoir s'il y a une UIView à cet emplacement. Mais il n'y a pas l'équivalent de HitTest en SwiftUI.

Idéalement, je voudrais un mécanisme pour chercher si une View se trouve à un endroit (x,y) et retourner son Tag (ou Nil s'il n'y a rien).


Exemple (bidon) pour comprendre la problématique :

J'ai des images sur l'écran, avec des tigres, des lions, des chats, des zèbres, des boeufs et du mais. Et des cases Prédateur, Gibier, Plante. Le but du jeu est de déplacer les objets dans les bonnes catégories.

Une idée pour faire ça, simplement en SWiftUI ?

J'ai quelques idées pour y parvenir :


Possibilité A
Utiliser le mécanise de drag&Drop d'iOS. Ça marche, mais ce n'est pas terrible graphiquement. On ne déplace pas l'objet mais un fantôme de même apparence. Dommage, parce que c'est top comme technique, avec l'objet de Drop recevant une notification et des informations sur l'émetteur du drag.


Possibilité B
Utiliser geometryReader pour calculer par code la position des cases de Drop, les archiver dans un tableau et placer ensuite sur l'écran. Ça fait usine à gaz, et absolument pas dans l'esprit SwiftUI.


Possibilité C
Aller trifouiller dans la couche UIKit sous-jacente à SwiftUI avec UIViewRepresentable pour créer l'équivalent d'un HitTest compatible avec SwiftUI.

Des suggestions ?

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.