4 votes

containsPoint ne fonctionne pas avec CAShapeLayer ?

J'ai deux CAShapeLayers dans la couche principale de UIView. Les CAShapeLayers ont des formes complexes et j'ai besoin de savoir si un point a été touché dans les limites de la forme. J'ai également besoin de savoir quelle forme a été touchée.

J'essaie le point de contenu, mais rien ne fonctionne.

7voto

alex Points 279

Après m'être tapé la tête pendant deux jours, j'ai réussi à produire ce code bizarre et il semble qu'il fonctionne !

Le but était de tester avec succès le CAShapeLayer. Le CAShapeLayer se déplace sur l'écran, donc la forme n'est pas à un endroit constant. Tester le CGPath currentPoint n'est pas simple.

N'hésitez pas à ajouter votre contribution...

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

    CGPoint p = \[\[touches anyObject\] locationInView:self\];

    CGAffineTransform transf = CGAffineTransformMakeTranslation(-shapeLayer.position.x, -shapeLayer.position.y); 

    if(CGPathContainsPoint(shapeLayer.path, &transf, p, NO)){    

       // the touch is inside the shape  
    }   

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X