키보드 올라오는 Delegate받기
- (void)viewDidAppear:(BOOL)animated { NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardWillShowNotification object:nil]; [center addObserver:self selector:@selector(keyboardHideScreen:) name:UIKeyboardWillHideNotification object:nil]; } - (void)viewDidDisappear:(BOOL)animated { NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center removeObserver:self name:UIKeyboardWillShowNotification object:nil]; [center removeObserver:self name:UIKeyboardWillHideNotification object:nil]; } #pragma mark - 키보드 -(void)keyboardOnScreen:(NSNotification *)notification { //... } -(void)keyboardHideScreen:(NSNotification *)notification { //... }
- (void) viewDidAppear:(BOOL)animated ; 는 화면이 나타나기 바로직전에 호출되는 함수이고
- (void) viewDidDisappear:(BOOL)animated ; 는 화면이 없어지기 바로 직전에 호출되는 함수이다.
viewDidAppear에 "키보드 올라오면 말해주세요" 용도의 노티피케이션을 설정하고
viewDidDisappear에 "아까 등록한 노티피케이션을 지워주세요"라고 설정한다.
#pragma mark - 키보드 -(void)keyboardOnScreen:(NSNotification *)notification { NSDictionary *info = notification.userInfo; NSValue *value = info[UIKeyboardFrameEndUserInfoKey]; CGRect rawFrame = [value CGRectValue]; CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil]; /*키보드 프레임*/ NSDictionary *userInfo = notification.userInfo; NSNumber *durationValue = userInfo[UIKeyboardAnimationDurationUserInfoKey]; /*키보드가 올라오는 동안의 시간*/ NSTimeInterval animationDuration = durationValue.doubleValue; NSNumber *curveValue = userInfo[UIKeyboardAnimationCurveUserInfoKey]; /*키보드 애니메이션 옵션 효과 (ease)*/ UIViewAnimationCurve animationCurve = curveValue.intValue; [UIView animateWithDuration:animationDuration delay:0.f options:animationCurve<<16 animations:^{ // ... } completion:nil]; } -(void)keyboardHideScreen:(NSNotification *)notification { NSDictionary *userInfo = notification.userInfo; NSNumber *durationValue = userInfo[UIKeyboardAnimationDurationUserInfoKey]; NSTimeInterval animationDuration = durationValue.doubleValue; NSNumber *curveValue = userInfo[UIKeyboardAnimationCurveUserInfoKey]; UIViewAnimationCurve animationCurve = curveValue.intValue; [UIView animateWithDuration:animationDuration delay:0.f options:animationCurve<<16 animations:^{ // ... } completion:nil]; }
// ... 부분에 애니메이션 코드를 넣어주면 키보드에서와 동일한 애니메이션 ease가 연출된다.
'Swift와 iOS' 카테고리의 다른 글
[iOS Objective-C] 구글 애널리틱스 사용하기 - 앱 통계 분석 및 그래프화 (0) | 2014.11.15 |
---|---|
[iOS Objective-C] 공유하기 - 메시지, 카카오톡, 페이스북, 트위터... (0) | 2014.11.14 |
[iOS Objective-C] gif깔끔하게 지원해주는 ImageView 오픈소스 라이브러리 (0) | 2014.11.09 |
[iOS Objective-C] NSDate <-> NSStirng (0) | 2014.11.09 |
[iOS Objective-C] UIView 에서 "ease" 애니메이션 적용하기 (0) | 2014.11.09 |
WRITTEN BY
- tucan.dev
개인 iOS 개발, tucan9389
,