2010-10-17 4 views
0

I ont une UIView que la vue conteneur/support. A l'intérieur que j'ai un groupe de UIView s (icônes)test de positionnement sur le sous-vues groupe

penser comme similaire à SpringBoard- de l'iPhone que vous avez un SBIconList (UIView sous-classe) avec un groupe de SBIcon s (également UIView sous-classes)

donc Jusqu'à présent, chaque icône de mes icônes est déplaçable, mais j'ai de la difficulté à écrire le code de détection de collision pour détecter une collision entre l'icône de glissement et une autre icône.

Ma configuration de base à ce jour est la suivante: j'écris le code hit-test dans le cadre de l'événement touchesMoved de l'icône. Je puis 'for' boucle à travers chaque sous-vue de la vue du conteneur (chaque icône) et essayez un CGRectContaninsPoint(currentSubviewFrame, touchPoint). currentSubviewFrame étant le cadre de l'icône dans la boucle de courant de la boucle « pour ». Et touchPoint étant le x/y du point de contact sur l'écran.

Le problème est que parce que le code est écrit sous la portée d'un des conteneurs subviews, les coordonnées semblent devenir par rapport à la sous-vue. Par exemple, la coordonnée du touchPoint (globalement) doit être, disons 160,240 (écran central) mais cette coordonnée est NSLog éd, disons 30,30. (Central par rapport à l'icône 60x60) Même cas pour le currentSubviewFramex, y, width & height.

Je dois mentionner que ce code a pour être écrit dans le cadre de l'événement touchesMoved de la sous-vue.

Toute aide serait appréciée. Merci à l'avance :)

Répondre

1

Jetez un oeil à des fonctions de thèses pour convertir les coordonnées entre les vues:

- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view 
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view 

Vous pouvez utiliser -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event sur tous vos sous-vues (sauf celui que vous faites glisser) pour savoir si il y avait une collision.

+0

Ah, exactement ce que j'ai besoin! Je vous remercie! :) – Jamie

+0

Super! Si cela répond à votre question, veuillez marquer la réponse comme acceptée. – aegzorz