Point qui n'est pas dans Rect mais CGRectContainsPoint dit oui
Si j'ai une UIImageView et que vous voulez savoir si un utilisateur a appuyé sur l'image. Dans touchesBegan, je ne le suit, mais toujours finir dans la première condamnation. La fenêtre est en mode portrait et l'image est en bas. Je peux appuyez sur dans le coin supérieur droit de la fenêtre et encore dans la première condition, qui semble très incorrect.
- (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)
Des suggestions?
OriginalL'auteur 4thSpace | 2009-06-11
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous obtenez le contact avec:
Ensuite, vous voulez vérifier pour la locationInView par rapport à votre image.
Prochaine, CGRectContainsPoint renvoie un booléen, donc, en la comparant à 0 est très étrange. Il doit être:
Mais si l'auto n'est pas myimage puis le myimage vue est peut-être le toucher plutôt que de vous - il n'est pas clair à partir de votre question de ce que l'objet en soi est il est n'est pas une sous-classe de la UIImageView en question.
4thSpace: Exactement. Elle renvoie la valeur 0 (et, par conséquent, l'égalité est vrai) parce que le point est à l'extérieur du rectangle. Si le point avait été à l'intérieur du rectangle, CGRectContainsPoint aurait renvoyé true (1), et l'égalité aurait été faux.
Je pense qu'il est utile 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 qui est relatif à la vue de coordonnée x,y de l'avion, alors que myimage.le cadre est par rapport à ça superview.L'hypothèse a été, je pense, le myimage est une sous-vue de soi, et donc si le locationInView:auto, et myImage.le châssis sont dans le même système de coordonnées. À l'aide de locatingInView:mon image et de mon image.limites pourrait être une autre possibilité.
OriginalL'auteur Peter N Lewis
Votre logique est simplement inversé. Le
CGRectContainsPoint()
méthode retourne un bool, c'est à dire le vrai pour le "oui". True n'est pas égal à 0.Bien sûr, mais il y a des cas où 0 indique "(sorte de) réussite" (comme strcmp()), c'est pourquoi je l'ai écrit de cette façon.
OriginalL'auteur unwind