2010-09-29 6 views
3

J'ai un UIScrollView qui contient un nombre quelconque de miniatures qui devraient détecter l'événement tactile, effectuer une transformation 3D sur eux-mêmes et appeler une méthode déléguée.Détection de touches pour les couches dans un UIScrollView

Le problème que je suis incapable de surmonter est de détecter quelle sous-couche est tapée. Je mets layer.name à un nombre d'index et la sous-classe de UIScrollView obtient l'événement tactile. Maintenant le dernier obstacle restant est comment faire un hitTest sur les sous-couches pour obtenir la propriété de nom et voila!

Je pensais à sous-classer un UIView comme conteneur du CALayer et capturer l'événement tactile de cette façon. Mais j'espère qu'il pourrait y avoir un moyen plus économique de déterminer si la sous-couche est touchée.

Le code que j'ai essayé (dans mon sous-classe UIScrollView):

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    if ([touches count] == 1) { 
     for (UITouch *touch in touches) { 

      CGPoint point = [touch locationInView:[touch view]]; 
      CALayer *alayer = [self.layer hitTest:point]; 
      if (alayer) NSLog(@"layer %@ touched",alayer.name); 
      else NSLog(@"layer not detected"); 

     } 
    } 
} 

Je reçois deux erreurs de compilation. d'abord un avertissement: aucune méthode hitTest trouvée. et une erreur «demande de nom de membre» est quelque chose qui n'est pas une structure ou une union ».

Répondre

2

Appelez [scrollView.layer hitTest:touchPoint];. La valeur de retour sera la couche qui a été touchée. Si la couche renvoyée est égale à scrollView.layer, aucune sous-couche n'a été sélectionnée.

+0

Ole, je visais la même solution, je pense. Cependant, je reçois deux erreurs de compilation avec mon code que j'ai posté ci-dessus. – cameron

+2

Vous n'avez probablement pas importé '. –

+0

Vous avez raison, monsieur! :X – cameron

Questions connexes