2010-10-16 2 views
8

Nous ajoutons la fonctionnalité glisser-déposer à ce qui deviendra un terrain de sport avec des positions pour les joueurs.iOS - Détection de collision par glisser-déposer Comment détecter quand l'élément sélectionné glisse sur une autre sous-vue?

Les positions sont mappées à l'aide d'Interface Builder, chacune étant une UIImageView distincte.

Nous voulons être en mesure de faire glisser les images du lecteur depuis les positions du banc depuis le côté de l'écran vers les positions sur le terrain.

Comment mieux détecter lorsque le joueur sélectionné qui est déplacé entre en collision avec une imagePosition existante?

Nous cherchons un moyen de détecter s'il y a une vue ou ImageView sous l'emplacement actuel.

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    tile1.center = location; 

    if gamePositionExistsAtCurrentLocation(location) { //want something like this 
    [tile1 setBackgroundColor:[UIColor blueColor]]; 
    } else { 
    [tile1 setBackgroundColor:[UIColor yellowColor]]; 
    } 
} 

Répondre

14

vérifier si le cadre de l'élément que vous déplacez intersecte avec le cadre de sur vos subviews

for (UIView *anotherView in self.subviews) { 
    if (movingView == anotherView) 
     continue; 
    if (CGRectIntersectsRect(movingView.frame, anotherView.frame)) { 
     // Do something 
    } 
} 

Si je vous étais, j'ajouter tous les jeux articles pertinents à un NSArray et -loop à travers cela. Donc, vous ne détectez pas les collisions avec des sous-vues qui n'ont rien à voir avec votre jeu comme les étiquettes et ainsi de suite.

+0

L'idée est que chaque fois que je bouge je lance à travers un tableau d'objets et de voir si elles correspondent à mon emplacement actuel (mais en utilisant cadre au lieu que vous mentionnez)? – Evolve

+0

Y at-il des méthodes fournies par Apple que je peux utiliser pour me faire savoir quelles sous-vues se croisent actuellement avec un point spécifié? – Evolve

4

pourrait également envisager view.center avec CGRectContainsPoint()

+0

La méthode prend le format suivant: CGRectContainsRect (<# CGRect rect1 #>, <#CGRect rect2 #>) comment représenter view.center ou location.centre en tant que rect? – Evolve

+0

Pas CGRectContainsRect(), je disais utiliser CGRectContainsPoint(). N'utilisez pas le premier à moins que votre rectangle de suppression ne soit significativement plus grand car cela ne renvoie que vrai si un rectangle est entièrement à l'intérieur d'un autre. – Nimrod

+0

Désolé ma mauvaise .. miss-read votre poste .. merci. Trié. Votre suggestion a été très utile. – Evolve

Questions connexes