2010-03-29 8 views
3

J'ai récemment asked a question concernant la détection des collisions dans les sous-vues, avec une réponse parfaite. Je suis arrivé au dernier point dans la mise en œuvre de la collision sur ma demande, mais j'ai rencontré un nouveau problème.Avancer moyen d'utiliser UIView méthode convertRect pour détecter CGRectIntersectsRect plusieurs fois

L'utilisation de convertRect a été très utile pour obtenir le CGRect de la sous-vue. J'avais besoin d'être un peu plus complexe car ce n'était pas exactement des rectangles qui devaient être détectés.

sur XCode J'ai créé une classe abstraite appelée TileViewController. Entre autres propriétés, il possède un IBOutlet UIView * detectionView; J'ai maintenant plusieurs classes qui héritent de TileViewController, et chaque classe il y a plusieurs vues imbriquées dans le detectionView que j'ai créé en utilisant Interface Builder. L'idée est un objet pourrait être une certaine forme ou taille, j'ai placé par programme ces points de détection «carrelés» au centre de chaque objet. Un utilisateur peut sélectionner un élément et interactif avec lui, dans ce cas le déplacer.

Maintenant, la méthode elle-même fonctionne dans une certaine mesure, mais je ne pense pas qu'elle fonctionne correctement avec les valeurs imbriquées car la détection est désactivée.

Une version simplifiée de cette méthode fonctionne - En utilisant CGRectIntersectsRect sur la détection elle-même, je me demande si je suis en boucle et vérifie les vues correctement? Je ne savais pas si elle comparait dans la même vue mais je suppose que c'est, j'ai modifié le code légèrement à un moment donné, plutôt que de comparer les valeurs dans self.view j'ai pris les UIViews de viewController.detectView dans le interactiveView.detectView mais le résultat était le même.

Il est donc truqué les sous-vues changent de couleur, mais ils changent de couleur quand ils ne sont même pas toucher, et quand ils le font toucher les mauvaises UIViews changent de couleur

Répondre

1

Je travaillais sur mon problème lors de l'utilisation convertRect. Je pensais avoir relu la documentation (croyez-moi je l'ai lue) mais j'ai manqué une information clé auparavant. Pour utiliser convertRect: toView: utiliser la méthode du point de vue doit être la cible de l'opération de conversion tel que mentionné dans le document, mais j'utilisais la vue elle-même comme la cible au lieu de la vue parent

interactRect = [detectInteractView convertRect:[detectInteractView frame] toView:parentView]; 

Cette est faux, je sais qu'il n'y a pas beaucoup de détails dans ce post mais finalement vous ne pouvez pas utiliser le même UIView que la vue cible, ou au moins si vous le pouvez, je ne pouvais pas le faire fonctionner ici!