UIButton not responding after animation

I would prefer first download the project from below link and then continue with question (only 36kb)

Download Link

  • how to access from UICollectionViewCell the indexPath of the Cell in UICollectionView
  • Animation of CGAffineTransform in iOS8 looks different than in iOS7
  • IOS: one IBAction for multiple buttons
  • What's the best way to call an IBAction from with-in the code?
  • Pass different parameters to an IBAction
  • Change UIImageView image half way of a flip animation
  • At start what I have is like below.

    enter image description here

    When I click My Office button, I am calling action actionSeenButton which will print NSLog(@"actionSeenButton");

    - (IBAction)actionSeenButton:(id)sender {
        NSLog(@"actionSeenButton");
    }
    

    This works perfect.

    When I click, Show hidden button, I am sliding view by 100 and showing the image and buttons that I have at the top, as shown in below image

    enter image description here

    Code used is

    - (IBAction)showHiddenButton:(id)sender {
        CGAffineTransform translation = CGAffineTransformIdentity;
        translation = CGAffineTransformMakeTranslation(0, 100);
        [UIView beginAnimations:nil context:nil];
        self.view.transform = translation;
        [UIView commitAnimations];
    }
    

    When I click this button, I am calling action actionHiddenButton which will print NSLog(@"actionHiddenButton");

    - (IBAction)actionHiddenButton:(id)sender {
        NSLog(@"actionHiddenButton");
    }
    

    BUT the problem is, when I click the new button that I see, action is not getting called.

    Any idea why this is happening?


    Note

    When I move the top hidden button from y=-70 to y=170, action is getting called.

    Sample project can be downloaded from here

    What I wanted to implement is, showing three buttons (as menu) on the top in one line by moving view down.

    3 Solutions Collect From Internet About “UIButton not responding after animation”

    verify that your button is not behind the frame of another view. even if the button is visable, if there is something covering it up it wont work. i don’t have access to xcode at the moment but my guess is your view “stack” is prohibiting you from interacting with the button. a button is esentually a uiview and you can do all the same animations to buttons and labels that you can with views. your best bet is to leave the view in the background alone and just move your buttons. since your “hidden” button isn’t part of your main “view” hiarchy thats where your problem is.

    upon further investigation, your problem is related to auto-layout and making sure your button object stays in the view hierarchy. if you turn off auto-layout you will see where the problem is. when you animate the main view down the “hidden” button is off of the view and there for inactive. the easiest solution is to just animate the buttons. the next best solution closest to what you have is to add another view onto your “main view” and then put the buttons into that view. also why do you have that background image twice? why not just set the background color of your view to that same yellow?

    I downloaded your project and it seems the translation you’re making for self.view. So the actionHiddenButton is not in the frame.Its better to have the controls you want to animate in the separate view.

    If you want to see the problem, after your view get transformed set clipsToBounds to YES. Like

        self.view.transform = translation;
        self.view.clipsToBounds = YES;
    

    Yipeee!!! Below is how I did.

    .h

    Added new variable.

    @property (retain, nonatomic) NSString *hideStatus;
    

    .m

    -(void) viewDidAppear:(BOOL)animated {
        NSLog(@"viewDidAppear");
        CGAffineTransform translation = CGAffineTransformIdentity;
        translation = CGAffineTransformMakeTranslation(0, -100);
        self.view.transform = translation;
        self.view.clipsToBounds = YES;
        [UIView commitAnimations];
        self.view.frame = CGRectMake(0,-80,320,560);
        hideStatus = @"hidden";
    }
    
    - (IBAction)showHiddenButton:(id)sender {
        NSLog(@"hideStatus===%@", hideStatus);
        CGAffineTransform translation = CGAffineTransformIdentity;
        if ([hideStatus isEqualToString:@"hidden"]) {
            translation = CGAffineTransformMakeTranslation(0, 0);
            hideStatus = @"shown";
        } else {
            translation = CGAffineTransformMakeTranslation(0, -100);
            hideStatus = @"hidden";
        }
    
        [UIView beginAnimations:nil context:nil];
        self.view.transform = translation;
        self.view.clipsToBounds = YES;
        [UIView commitAnimations];
    }
    

    Attached is the sample project. You can download from here.