title: UITapGestureRecognizer not working on UILabel
body: <p>I am trying to add a UITapGestureRecognizer to a UILabel that will animate down from the status bar if the user has a new announcement. I want the user to be able to click the label and goto the announcement directly. The UITapGetureRecognizer isn't working. Here is what I am doing:</p>
  
  <pre><code>+(void)animateDown:(NSString *)title view:(UIViewController *)view color:(UIColor *)color time:(NSTimeInterval)duration
  {
      view = view.navigationController.visibleViewController;
      if (currentlyDisplayed == NO) {
          if (color == nil) color = customGreen;
          UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0 ,-40, 320, 40)];
          label.text = title;
          label.font = [UIFont fontWithName:@"STHeitiTC-Medium" size:18];
          label.backgroundColor = color;//customBlue;//[UIColor colorWithRed:0.0993145 green:0.0957361 blue:0.562879 alpha:.8f];
          label.layer.cornerRadius = 15.0f;
          [label setTextAlignment:NSTextAlignmentCenter];
          [label setMinimumFontSize:12];
          [label setAdjustsFontSizeToFitWidth:YES];
          [label sizeToFit];
          label.textColor = [UIColor whiteColor];
          if ([color isEqual:customBlue]) {
              UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
              tap.numberOfTapsRequired = 1;
              tap.numberOfTouchesRequired = 1;
              label.userInteractionEnabled = YES;
              [label addGestureRecognizer:tap];
          }
          [view.view addSubview:label];
          [view.view bringSubviewToFront:label];
          currentlyDisplayed = YES;
          [UIView animateWithDuration:.5f delay:0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseIn animations:^{
              label.frame = CGRectMake(0, 0, 320, 40);
          }completion:^(BOOL finished) {
              CGFloat dur;
              if (duration == 0)  {
                  dur = .5f;
              }else {
                  dur = duration;
              }
  
              [UIView animateWithDuration:1 delay:dur options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseOut animations:^{
                  label.frame = CGRectMake(0,-40,320,40);
              }completion:^(BOOL finished) {
                  if (finished) [label removeFromSuperview];
                  currentlyDisplayed = NO;
              }];
          }]; 
      }else {
          NSMethodSignature *sig = [[self class] methodSignatureForSelector:@selector(animateDown:view:color:time:)];
          NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
          [invocation setSelector:@selector(animateDown:view:color:time:)];
          [invocation setTarget:self];
          [invocation setArgument:&amp;title atIndex:2];
          [invocation setArgument:&amp;view atIndex:3];
          [invocation setArgument:&amp;color atIndex:4];
          [invocation setArgument:&amp;duration atIndex:5];
          [NSTimer scheduledTimerWithTimeInterval:0.5 invocation:invocation repeats:NO];
      }
  }
  
  
  
  - (IBAction)onTap:(UIPanGestureRecognizer *)recognizer {
      [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"announcementTapped" object:nil]];
      NSLog(@"tapped");
  }
  </code></pre>
  
  <p>The onTap method is never called....It goes into the if statement..See image:
  <img src="https://i.stack.imgur.com/ouxZI.png" alt="enter image description here"></p>