Question

I'm wanting to invoke touchesEnded: method when the user TAPPED on a specific location on the screen but not when a user swipped on the screen. How can I achieve this?

From debugging, it seems that touchesEnded: is called when the user either tapped or swipped. I suppose I can add a local variable to track if the user had swipped like below but I think there is a more robust way of handling this:

BOOL trackSwipe  = NO;  // Local variable

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
     trackSwipe = YES;
     // do something
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
     if (trackSwipe == YES)
         return;
     else
     {
         CGPoint touchPoint = [[touches anyObject] locationInView:self];
         // do additional work
     }
}

I have also looked into adding UITapGestureRecognizer to invoke the tap selector but this approach doesn't allow me to find the touchPoint which is very important to have.

I appreciate any help on this. Many thanks.

Was it helpful?

Solution

You can try this using a UITapGestureRecognizer

ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIGestureRecognizerDelegate>

@end

ViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapMethod:)];
    recognizer.numberOfTapsRequired = 1;
    recognizer.numberOfTouchesRequired = 1;
    recognizer.delegate = self;

    [self.view addGestureRecognizer:recognizer];
}

- (void)tapMethod:(UITapGestureRecognizer *)recognizer
{
    CGPoint touch = [recognizer locationInView:yourViewHere];
    NSLog(@"X: %f Y: %f",touch.x,touch.y);
}

OTHER TIPS

In your viewDidLoad do this:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:tap];

Selector method:

-(void)dismissKeyboard{
    [self.view endEditing:YES];
}

Using this method you can determine tap gesture.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top