Je travaille sur une application de calculatrice graphique pour iPad et je voulais ajouter une fonctionnalité permettant à l'utilisateur de toucher une zone de la vue graphique pour créer une zone de texte affichant les coordonnées du point touché. Comment puis-je obtenir un CGPoint à partir de cela?
vous avez deux voies ...
1.
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
}
ici, vous pouvez obtenir la position avec le point de la vue actuelle ...
2.
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[tapRecognizer setNumberOfTapsRequired:1];
[tapRecognizer setDelegate:self];
[self.view addGestureRecognizer:tapRecognizer];
ici, ce code utilise quand vous voulez faire quelque chose avec votre objet particulier ou sous-vue de votre mainview
Essaye ça
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
// Get the specific point that was touched
CGPoint point = [touch locationInView:self.view];
NSLog(@"X location: %f", point.x);
NSLog(@"Y Location: %f",point.y);
}
Vous pouvez utiliser "touches effacées" si vous préférez voir où l'utilisateur a levé son doigt de l'écran au lieu de toucher l'endroit où il s'est touché.
il est probablement préférable et plus simple d’utiliser un UIGestureRecognizer avec la vue Carte au lieu d’essayer de le sous-classer et d’intercepter les contacts manuellement.
Étape 1: Ajoutez d’abord le logiciel de reconnaissance de mouvements à la vue Carte:
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tapGestureHandler:)];
tgr.delegate = self; //also add <UIGestureRecognizerDelegate> to @interface
[mapView addGestureRecognizer:tgr];
Étape 2: Ensuite, implémentez shouldRecognizeSimultaneousWithGestureRecognizer et renvoyez YES pour que votre outil de reconnaissance des gestes tactiles puisse fonctionner en même temps que celui de la carte (sinon, les taps sur les punaises ne seront pas automatiquement gérés par la carte):
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer
:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Étape 3: Enfin, implémentez le gestionnaire de gestes:
- (void)tapGestureHandler:(UITapGestureRecognizer *)tgr
{
CGPoint touchPoint = [tgr locationInView:mapView];
CLLocationCoordinate2D touchMapCoordinate
= [mapView convertPoint:touchPoint toCoordinateFromView:mapView];
NSLog(@"tapGestureHandler: touchMapCoordinate = %f,%f",
touchMapCoordinate.latitude, touchMapCoordinate.longitude);
}
Je veux juste lancer un Swift 4 answer car l’API est très différente.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = event?.allTouches?.first {
let loc:CGPoint = touch.location(in: touch.view)
//insert your touch based code here
}
}
OR
let tapGR = UITapGestureRecognizer(target: self, action: #selector(tapped))
view.addGestureRecognizer(tapGR)
@objc func tapped(gr:UITapGestureRecognizer) {
let loc:CGPoint = gr.location(in: gr.view)
//insert your touch based code here
}
Dans les deux cas, loc
contiendra le point qui a été touché dans la vue.
Si vous utilisez un objet UIGestureRecognizer
ou UITouch
, vous pouvez utiliser la méthode locationInView:
pour récupérer la CGPoint
dans la vue donnée que l'utilisateur a touchée.
func handleFrontTap(gestureRecognizer: UITapGestureRecognizer) {
print("tap working")
if gestureRecognizer.state == UIGestureRecognizerState.Recognized {
`print(gestureRecognizer.locationInView(gestureRecognizer.view))`
}
}