Si j'ai un UIImageView et que je veux savoir si un utilisateur a tapoté l'image. Dans touchesBegan, je fais ce qui suit mais finissent toujours dans le premier conditionnel. La fenêtre est en mode portrait et l'image est en bas. Je peux taper dans le coin supérieur droit de la fenêtre et toujours aller dans la première condition, ce qui semble très incorrect.Point non dans Rect mais CGRectContainsPoint dit oui
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:touch.view];
if(CGRectContainsPoint(myimage.frame, location) == 0){
//always end up here
}
else
{ //user didn't tap inside image}
et les valeurs sont:
location: x=303,y=102
frame: origin=(x=210,y=394) size=(width=90, height=15)
Toutes les suggestions?
Non selon les docs: developer.apple.com/documentation/graphicsimaging/... - "Renvoie 1 si le point spécifié est situé dans le rectangle spécifié, sinon, 0." Utiliser le code comme ci-dessus avec self.view fonctionne puisque c'est un UIViewController. Merci. – 4thSpace
4thSpace: Exactement. Il renvoie 0 (et, par conséquent, l'égalité est vraie) car le point est en dehors du rectangle. Si le point était à l'intérieur du rectangle, CGRectContainsPoint aurait renvoyé true (1), et l'égalité aurait été false. –
Je pense qu'il vaut la peine de mentionner que la logique présentée ici ne fonctionne pas si l'image ne remplit pas l'écran. '[touch locationInView: self]' vous donnera un point relatif aux plans de coordonnées des vues x, y, alors que myimage.frame est relatif à sa vue d'ensemble. – BBonifield