2013-07-18 12 views

risposta

13

Utilizzando touchesBegan Evento

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchPoint = [touch locationInView:self.view]; 
    NSLog(@"Touch x : %f y : %f", touchPoint.x, touchPoint.y); 
} 

Questo evento viene attivato quando tocca inizia.

Utilizzando Gesto

Pubblica il tuo UITapGestureRecognizer in viewDidLoad: Metodo

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognizer:)]; 
    [self.view setUserInteractionEnabled:YES]; 
    [self.view addGestureRecognizer:tapGesture]; 
} 

Impostazione della funzione tapGestureRecognizer

// Tap GestureRecognizer function 
- (void)tapGestureRecognizer:(UIGestureRecognizer *)recognizer { 
    CGPoint tappedPoint = [recognizer locationInView:self.view]; 
    CGFloat xCoordinate = tappedPoint.x; 
    CGFloat yCoordinate = tappedPoint.y; 

    NSLog(@"Touch Using UITapGestureRecognizer x : %f y : %f", xCoordinate, yCoordinate); 
} 

Sample Project

+0

Uscendo dal primo metodo che hai dato, usando i tocchi iniziati, come posso rendere le variabili globali di posizione xey? – AwesomeTN

+0

Crea una variabile CGPoint nel tuo file .h e assegnala nel methoh sopraindicato. – icodebuster

+0

I tocchi hanno iniziato a funzionare alla grande, ma non riesco a ottenere i tocchi. Per funzionare, non è esattamente la stessa cosa? – AwesomeTN

0

Ecco un esempio molto semplice (posizionarlo all'interno del vostro controller di vista):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.view]; 
    NSLog(@"%@", NSStringFromCGPoint(currentPoint)); 
} 

Questo innesca ogni volta che il tocco si sposta. Puoi anche utilizzare touchesBegan:withEvent: che si attiva all'avvio di un tocco e touchesEnded:withEvent: che si attiva quando un tocco termina (cioè un dito viene sollevato).

È anche possibile farlo utilizzando uno UIGestureRecognizer, che in molti casi è più pratico.

+0

I c/p questo nel mio controller di visualizzazione e ho ricevuto un errore con NSLog, ma è stato risolto cambiando la stringa in NSSringFromCGPoint. Ma ancora non ho ricevuto nulla nella console, mi manca qualcosa? Grazie per il tuo aiuto – AwesomeTN

+0

Non dovresti aggiungere altro codice per farlo funzionare. Potrebbe qualcos'altro catturare l'evento di tocco (ad esempio, c'è una sottoview come un pulsante che potrebbe impedire al tocco di passare alla visualizzazione di viewController)? – Ander

+0

In sostanza, qualsiasi vista aggiunta a 'self.view' di viewController che non ha' .userInteractionEnabled = NO' catturerebbe il tocco e impedirà di andare ai metodi indicati nella risposta sopra. – Ander

2

Per prima cosa è necessario aggiungere un riconoscitore di gesti alla vista desiderata.

UITapGestureRecognizer *myTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTapRecognizer:)]; 
[self.myView setUserInteractionEnabled:YES]; 
[self.myView addGestureRecognizer:myTap]; 

Poi nel metodo gesto riconoscitore si effettua una chiamata a locationInView:

- (void)myTapRecognizer:(UIGestureRecognizer *)recognizer 
{ 
    CGPoint tappedPoint = [recognizer locationInView:self.myView]; 
    CGFloat xCoordinate = tappedPoint.x; 
    CGFloat yCoordinate = tappedPoint.y; 
} 

Si consiglia di dare un'occhiata al di Apple UIGestureRecognizer Class Reference

Problemi correlati