Last active
August 29, 2015 14:11
-
-
Save JigarM/9297a2cc0a14cd7dc3f8 to your computer and use it in GitHub Desktop.
How to lift up the UIView when UITextField is editing ?
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
//Original Blog Post : http://technopote.com/lift-uiview-uitextfield-editing/ | |
//Controller.h | |
@interface Controller : UIViewController <UITextFieldDelegate> { | |
CGFloat animatedDistance; | |
} | |
//Controller.m | |
#pragma constant UITextField | |
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; | |
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; | |
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.6; | |
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; | |
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162; | |
#pragma mark UITextField delegate method | |
- (BOOL)textFieldShouldReturn:(UITextField *)textField { | |
[textField resignFirstResponder]; | |
return NO; | |
} | |
- (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; | |
} | |
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]; | |
[UIView commitAnimations]; | |
} |
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
//Original Blog Post : https://gist.github.com/siannopollo/7892526 | |
@implementation DelegateController { | |
CGFloat keyboardAnimatedDistance; | |
} | |
static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; | |
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; | |
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162; | |
- (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 viewHeight, bottomOfTextField, topOfKeyboard; | |
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; | |
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) { | |
viewHeight = viewRect.size.height; | |
bottomOfTextField = textFieldRect.origin.y + textFieldRect.size.height; | |
topOfKeyboard = viewHeight - PORTRAIT_KEYBOARD_HEIGHT - 10; // 10 point padding | |
} else { | |
viewHeight = viewRect.size.width; | |
bottomOfTextField = textFieldRect.origin.x + textFieldRect.size.width; | |
topOfKeyboard = viewHeight - LANDSCAPE_KEYBOARD_HEIGHT - 10; // 10 point padding | |
} | |
if (bottomOfTextField >= topOfKeyboard) keyboardAnimatedDistance = bottomOfTextField - topOfKeyboard; | |
else keyboardAnimatedDistance = 0.0f; | |
CGRect viewFrame = self.view.frame; | |
viewFrame.origin.y -= keyboardAnimatedDistance; | |
[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 += keyboardAnimatedDistance; | |
[UIView beginAnimations:nil context:NULL]; | |
[UIView setAnimationBeginsFromCurrentState:YES]; | |
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; | |
[self.view setFrame:viewFrame]; | |
[UIView commitAnimations]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment