ZuluDeltaNiner
ZuluDeltaNiner

Reputation: 735

How do I detect a tap anywhere in the view?

I have a tutorial for my app, which should display only the first time the app is opened and should be tapped to dismiss.

I am initializing a UITapGestureRecognizer in my viewDidLoad:

tapper_tut = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapper_tut.cancelsTouchesInView = FALSE;
[self.view addGestureRecognizer:tapper_tut];

and I have an IBAction to detect the tap and set the tutorial to hidden:

- (IBAction)dismiss_tut{
    if (????????????????) {
        _tutorial.hidden = YES;
    }
}

But I have no idea what to put in the if statement condition, or if this is even that right way to go about this.

How would I dismiss a UIImageView on a tap?

Upvotes: 4

Views: 7543

Answers (4)

Amulya
Amulya

Reputation: 182

I think u need to detect the first time launch of the application which u can do with following

![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]

Put this in your if statement .

Upvotes: 0

Bhavesh
Bhavesh

Reputation: 1422

You can make viewDidLoad like this

- (void)viewDidLoad 
  { 
      [super viewDidLoad];
      self.view.backgroundColor = [UIColor whiteColor];

      /* Create the Tap Gesture Recognizer */
      self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                   action:@selector(handleTaps:)]; 

     /* The number of fingers that must be on the screen */
      self.tapGestureRecognizer.numberOfTouchesRequired = 1;

     /* The total number of taps to be performed before the gesture is recognized */
      self.tapGestureRecognizer.numberOfTapsRequired = 1;

     /* Add this gesture recognizer to the view */
     [self.view addGestureRecognizer:self.tapGestureRecognizer];
  }

To detect the taps you can make the method like this.

- (void) handleTaps:(UITapGestureRecognizer*)paramSender
  {
      NSUInteger touchCounter = 0; 
      for (touchCounter = 0;touchCounter < paramSender.numberOfTouchesRequired;touchCounter++)
      {
            CGPoint touchPoint =[paramSender locationOfTouch:touchCounter inView:paramSender.view];
            NSLog(@"Touch #%lu: %@",(unsigned long)touchCounter+1, NSStringFromCGPoint(touchPoint));
      }
  }

Upvotes: 3

Dhaval Bhadania
Dhaval Bhadania

Reputation: 3089

you have to declare .h file as "UIGestureRecognizerDelegate"

you have getting tap of gesture as two way as given below steps.

1) Call delegate method of GestureRecognizer (not given action )

UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil]; // not given  action.
recognizer.numberOfTouchesRequired=1;// here how many tap you want set it 
[self.view addGestureRecognizer:recognizer];
recognizer.delegate = self;

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
 {
     //whatever you want write code here
    return NO;
  }

2) given action

 UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Addphoto)];
 [oneTouch setNumberOfTouchesRequired:1];
 [self.view addGestureRecognizer:oneTouch];

 -(IBAction)Addphoto
 {
     //whatever you want write code here
 }

may be it will help .

Upvotes: 2

Jay Gajjar
Jay Gajjar

Reputation: 2741

UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[self.view addGestureRecognizer:gr];
// if not using ARC, you should [gr release];
// mySensitiveRect coords are in the coordinate system of self.view


- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint p = [gestureRecognizer locationInView:self.view];
    if (CGRectContainsPoint(mySensitiveRect, p)) {
        NSLog(@"got a tap in the region i care about");
    } else {
        NSLog(@"got a tap, but not where i need it");
    }
}

Upvotes: 12

Related Questions