Détecter si UIView est l'intersection d'autres UIViews
J'ai un tas de UIViews sur l'écran. Je voudrais savoir quelle est la meilleure façon de vérifier si un point de vue particulier (que j'ai de référence) est l'intersection de TOUTES les autres vues. La façon dont je suis en train de faire maintenant est, le parcours bien que tous les sous-vues et de vérifier un par un s'il y a une intersection entre les images.
Cela ne semble pas très efficace. Est-il une meilleure façon de le faire?
Avez-vous essayé d'exécuter le code dans les Instruments? Je pense que vous trouverez que c'est parfaitement efficace et rapide. Le code de rect intersection est juste simple de math donc je ne peux pas le voir être un problème en termes de vitesse, même avec des centaines de points de vue.
OriginalL'auteur 0xSina | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
D'abord, créer un tableau qui stocke les images de toutes vos UIViews et leurs associés de référence.
Puis, éventuellement dans un thread d'arrière-plan, vous pouvez exécuter certains tests de collision à l'aide de ce qui est dans le tableau. Pour certains de simples tests de collision pour les rectangles seulement, découvrez ce DONC, la question: Simple Algorithme de Collision pour les Rectangles
Espère que ça aide!
OriginalL'auteur Jordan Smith
Il y a une fonction appelée CGRectIntersectsRect qui reçoit deux CGRects comme arguments et retourne si les deux rectangles ne se croisent. Et UIView a des sous-vues de la propriété qui est un NSArray de UIView objets. Vous pouvez donc écrire une méthode BOOL valeur de retour qui vais parcourir ce tableau et vérifier si deux rectangles se croisent, comme tel:
N'a pas pu obtenir de formatage de code dans les commentaires. 😛 tout de même un peu de refactoring + corrections de code.
Vous avez raison Jonny je devais quitter l'itération. J'ai donc changé le code pour être plus efficace.
en objc/cacao code? doit être une faute de frappe, non? Super réponse, néanmoins, doit être acceptée. +1
au lieu de
CGRectIntersectsRect
vous pouvez utiliserNSIntersectsRect
OriginalL'auteur Mikayil Abdullayev
Pour Réaliser la même chose dans rapide que par le a accepté de répondre puis ici, c'est la fonction. Readymade Code. Il suffit de copier et de les utiliser selon les étapes. Par la façon dont je suis en utilisant Xcode 7.2 avec Swift 2.1.1.
Maintenant appeler cette fonction que par la suite -
Grâce.
Espère que cela a aidé.
CGRectIntersectsRect(viewToCheck.frame, viewS.frame)
avecviewToCheck.frame.intersects(viewS.frame)
travaillé mais en swift 3 , veuillez utiliser la vue.cadre.coupe(secondView.image) {...}
OriginalL'auteur onCompletion
Dans mon cas, le point de vue où imbriqués, j'ai donc fait cela (fonctionne avec les deux imbriqués et non):
Espère que cela aide.
OriginalL'auteur Aviv Ben Shabat