Note that there are some explanatory texts on larger screens.

plurals
  1. POUITapGestureRecognizer not working on UILabel
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload