2009-11-10 3 views
1

Je suis nouveau à publier sur ce forum, mais je ne peux pas vous dire combien de fois la lecture m'a aidé. Actuellement, je travaille sur un jeu pour l'iPhone, il a une grille de UIImageViews qui sont contenues dans une sous-vue de mon gameboardViewController. Je construis la grille sur ViewDidLoad. Ok jusqu'ici. Maintenant j'utilise touchesBegan pour savoir lequel des UIImageViews a été touché, quel genre de travail. Je dis genre-de parce que CGRectContainsPoint semble donner un faux résultat, ce qui signifie que la ligne supérieure de cette grille est considérée par cette fonction comme étant en dehors de mon rectangle de sous-vision.Obtenir un résultat CGRectContainsPoint plus précis

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event 
{ 

    UITouch *touch = [touches anyObject]; 
    CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView]; 

    CGRect gridRect = self.gridView.frame; 
    // Since I have an overlay I want to ignore touches when this subview is visible. 
    if(self.readyScreen.hidden) 
    { 
     /* restrict the touches to only the subview gridView so any stray touches should be ignored.*/ 
     if(CGRectContainsPoint(gridRect,currentLocation)) 
     { 
      UIImageView *theTile = (UIImageView *)touch.view; 
      [self gridItemTouched:theTile]; 
     } 
    } 

}

Pour une raison quelconque, il ne suffit pas juste de voir que la rangée supérieure de 50 x 50 UIImageViews sont dans le sous-vue.

Des suggestions?

Répondre

2

Vous convertissez l'emplacement du point d'accès au système de coordonnées gridView. Mais alors vous vérifiez si cela est contenu dans le cadre gridView, qui est dans son système de coordonnées superviews.

Vous avez deux choix pour résoudre ce:

Soit utiliser le système coodinate de gridView:

CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView.superview]; 

Ou utiliser le système coodinate du superview:

CGRect gridRect = self.gridView.bounds; 
+0

Ah je vois merci pour la Aidez-moi. Je l'ai maintenant fonctionne comme prévu. Restez à l'écoute pour ma prochaine question car je suis sûr que j'en aurai plus. – brucemartin

Questions connexes