Created
February 4, 2010 20:50
-
-
Save shauber/295089 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; | |
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; | |
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; | |
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; | |
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 140; | |
- (void)textFieldDidBeginEditing:(UITextField *)textField { | |
CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField]; | |
CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view]; | |
CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; | |
CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height; | |
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height; | |
CGFloat heightFraction = numerator / denominator; | |
if (heightFraction < 0.0) | |
{ | |
heightFraction = 0.0; | |
} | |
else if (heightFraction > 1.0) | |
{ | |
heightFraction = 1.0; | |
} | |
UIInterfaceOrientation orientation = | |
[[UIApplication sharedApplication] statusBarOrientation]; | |
if (orientation == UIInterfaceOrientationPortrait || | |
orientation == UIInterfaceOrientationPortraitUpsideDown) | |
{ | |
animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); | |
} | |
else | |
{ | |
animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction); | |
} | |
CGRect viewFrame = self.view.frame; | |
viewFrame.origin.y -= animatedDistance; | |
[UIView beginAnimations:nil context:NULL]; | |
[UIView setAnimationBeginsFromCurrentState:YES]; | |
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; | |
[self.view setFrame:viewFrame]; | |
[UIView commitAnimations]; | |
} | |
- (void)textFieldDidEndEditing:(UITextField *)textField { | |
CGRect viewFrame = self.view.frame; | |
viewFrame.origin.y += animatedDistance; | |
[UIView beginAnimations:nil context:NULL]; | |
[UIView setAnimationBeginsFromCurrentState:YES]; | |
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; | |
[self.view setFrame:viewFrame]; | |
self.navigationItem.rightBarButtonItem.enabled = [self shouldEnableSave]; | |
[UIView commitAnimations]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment