Chase Roberts
Chase Roberts

Reputation: 9386

UIView.animateWithDuration not animating when called inside keyboardWillShow

For some reason my view is not animating:

- (void)keyboardWillShow:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    double duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    int curve = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];

    int height = self.view.bounds.size.height - kbSize.height+self.tabBarController.tabBar.frame.size.height;
    self.notesView.frame = CGRectMake(0, -height, 
    self.view.bounds.size.width, height);
    [UIView animateWithDuration:1.5 delay:0 options:curve animations:^{
        self.notesView.frame = CGRectMake(0, 0, self.view.bounds.size.width, height);
    } completion:nil];
}

The notesView is being displayed but not animated. When I move the animation code into a btnPressed method then it animates as expected. Any ideas?

Edit It looks like the method is being called twice (that's a separate problem dealing with the inputAccessoryView that I still need to figure out). I updated it to see if calling the animateWithDuration code only once would solve the problem. However, it's still not animating.

- (void)keyboardWillShow:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    int curve = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
    int height = self.view.bounds.size.height - kbSize.height + self.tabBarController.tabBar.frame.size.height;
    if (height == 510) return; //for some reason the self.view.bounds.size.height is different between the two calls
    self.notesView.frame = CGRectMake(0, -height, self.view.bounds.size.width, height);
    [UIView animateWithDuration:1.5 delay:0 options:curve animations:^{
        self.notesView.frame = CGRectMake(0, 0, self.view.bounds.size.width, height);
    } completion:nil];
}

Upvotes: 1

Views: 29

Answers (0)

Related Questions