Comment puis-je get les coordonnées du robinet sur un UIButton personnalisé?

J'utilise XCode 4.4 en développement pour iOS 5 sur un iPad et j'utilise la layout Storyboard lors de la création de mon button personnalisé.

J'ai l'événement tactile fonctionnant et enregistrant correctement mais maintenant je veux get les coordonnées x / y du robinet sur mon button personnalisé.

Si possible, j'aimerais que les coordonnées soient relatives au button personnalisé plutôt qu'à l'set de l'écran de l'iPad.

Voici mon code dans le file .h:

- (IBAction)getButtonClick:(id)sender; 

et mon code dans le file .m:

  - (IBAction)getButtonClick:(id)sender { NSLog(@"Image Clicked."); } 

Comme je l'ai dit, cela se connecte correctement lorsque je tape sur l'image.

Comment puis-je get les coordonnées du robinet?

J'ai essayé quelques exemples différents sur internet mais ils gèlent toujours quand ils affichent un tas de nombres (peut-être les coordonnées) dans la boîte de dialog. Je suis très nouveau pour iOS en développement alors s'il vous plaît le rendre aussi simple que possible. Merci!

Pour get l'location tactile, vous pouvez utiliser une autre variante de la méthode d'action par button: myAction:forEvent: (si vous le créez à partir de l'option IB de l'interface IB "expéditeur et événement" dans le champ arguments: entrez la description de l'image ici )

Ensuite, dans votre gestionnaire d'actions, vous pouvez get l'location tactile à partir du paramètre d'événement, par exemple:

 - (IBAction)myAction:(UIButton *)sender forEvent:(UIEvent *)event { NSSet *touches = [event touchesForView:sender]; UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:sender]; NSLog(@"%@", NSSsortingngFromCGPoint(touchPoint)); } 

En cas de Swift 3.0, la réponse acceptée fonctionne même si la syntaxe est modifiée comme suit:

Swift 3.0:

  @IBAction func buyTap(_ sender: Any, forEvent event: UIEvent) { let myButton = sender as! UIButton let touches = event.touches(for: myButton) let touch = touches?.first let touchPoint = touch?.location(in: myButton) print("touchPoint\(touchPoint)") } 

Pour vos coordonnées globales (en reference à l'écran), vous devez créer un CGPoint contenant les coordonnées de votre contact. Mais pour ce faire, vous devez d'abord avoir ce contact. Commencez donc par get l'événement tactile, puis en faisant ce point en utilisant la méthode locationInView . Maintenant, en fonction du moment où vous voulez save le contact – lorsque l'user touche le sol ou quand il lève le doigt -, vous devez implémenter ce code dans la méthode touchesBegan ou touchesEnded . Disons que vous faites des touchesEnded , qui passe un "touch" de NSSet cales contenant tous les events tactiles.

 UITouch *tap = [touches anyObject]; CGPoint touchPoint = [tap locationInView:self.view]; 

"touchPoint" va maintenant contenir le point où l'user lève son doigt. Pour imprimer les coordonnées, il vous suffit d'accéder aux propriétés x et y de ce point:

 CGFloat pointX = touchPoint.x; CGFloat pointY = touchPoint.y; NSLog(@" Coordinates are: %f, %f ", pointX, pointY); 

Cela devrait produire les coordonnées du toucher. Maintenant, pour qu'il soit référencé à n'importe quel button que vous utilisez, je vous suggère de simplement soustraire manuellement les valeurs pour les coordonnées du button du point. Cela semble être une solution simple, et honnêtement, je ne connais pas un moyen d'get des coordonnées en reference à un autre object, sauf si vous faites une vue basée sur cet object, et passez le à locationInView au lieu de self.view .

Pour plus d'informations sur les touches, il y a un grand nombre de tutoriels ici .