2013-07-18 13 views

Odpowiedz

13

Korzystanie touchesBegan Event

- (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); 
} 

To zdarzenie jest wywoływane, gdy zaczyna dotykowego.

Korzystanie gest

Zarejestruj UITapGestureRecognizer w viewDidLoad: Metoda

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

Konfigurowanie funkcji 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

Wychodząc z pierwszej metody, którą podałeś, używając dotknięć, jak mogę utworzyć globalne zmienne pozycji xiy? – AwesomeTN

+0

Utwórz zmienną CGPoint w pliku .h i przypisz ją w powyższej metodzie. – icodebuster

+0

Dotknięcia zaczęły działać świetnie, ale nie jestem w stanie uzyskać dotyku. Pracowałem, czy to nie jest dokładnie to samo? – AwesomeTN

0

Oto bardzo prosty przykład (umieścić go wewnątrz kontrolerze widoku):

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

To wyzwala każdym razem, gdy porusza dotykowych. Możesz także użyć funkcji touchesBegan:withEvent:, która uruchamia się, gdy zaczyna się dotyk, i touchesEnded:withEvent:, która wyzwala się, gdy kończy się dotyk (czyli palec zostanie podniesiony).

Można to również zrobić za pomocą UIGestureRecognizer, co w wielu przypadkach jest bardziej praktyczne.

+0

I c/p to do mojego kontrolera widoku i dostałem błąd z NSLog, ale zostało to naprawione poprzez zmianę ciągu na NSSringFromCGPoint. Ale wciąż nic nie dostałem na konsoli, czy coś mi brakuje? Dzięki za pomoc – AwesomeTN

+0

Nie powinieneś dodawać żadnego dodatkowego kodu, aby to zadziałało. Czy coś innego może uchwycić zdarzenie dotykowe (np. Czy istnieje podgląd podobny do przycisku, który mógłby powstrzymać dotyk przed przejściem do widoku viewController)? – Ander

+0

Zasadniczo każdy widok dodany do 'self.view' viewControllera, który nie ma' .userInteractionEnabled = NO', przechwyciłby dotyk i uniemożliwiłby przejście do metod podanych w powyższej odpowiedzi. – Ander

2

Najpierw musisz dodać rozpoznawacz gestów do widoku, który chcesz.

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

Następnie w metodzie gest Recognizer można dodzwonić do locationInView:

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

Możesz spojrzeć na Apple UIGestureRecognizer Class Reference

Powiązane problemy