2013 이전/iOS개발

[iPhone 개발] keyboard 애니메이션 정보 얻기

하구루 2017. 2. 25. 16:06

키보드에 붙어 다니는 뷰를 만들다 보니 keyboard 가 가지고 있는 애니메이션과 동일하게 해당뷰의 애니메이션을 지정해주어야 한다.

예전 iOS4 까지는

[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
위와 같은 애니메이션을 주면 키보드와 혼연일체로 움직인다.

하지만 iOS5 로 업데이트 되면서 keyboard 가 빨라 졌다.

테스트를 통해서 확인해 본결과 duration이 0.26으로 줄어 들었다.

게다가 iOS5에는 일본어 키보드에 힌트를 위한 뷰가 키보드위에 생겨났다.

이에 관한 것은 http://hagulu.com/129 포스트를 참고 하길 바란다.

일본어 키보드 때문에 대응해야하는 애니메이션이 있는데,

기존에 다른 언어 키보드가 있을때 일본어 키보드로 변경될때는  애니메이션이 없이 움직인다.

따라서 키보드 위에 붙어 다니는 뷰에서 애니메이션이 없어야 한다.

일본어 키보드가 뜨면 키보드 위에 붙어있는 뷰가 애니메이션이 적용되어 부자연스럽게 보여진다.

이렇게 iOS4 이전과 iOS5 이후를 if문 없이 대응 할수 있는 방법을 설명하려고 한다.

위에 소개된 포스트에서 이용하던 것과 비슷한 방법이다.

먼저 아래에 두개의 notification을 설정해 준다.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

해당 notification은 보시는 봐와 같이 키보드가 나타나거나 사라지려 할때 나타나는 notification 이다.

이때에 notification 이 가지고 있는 정보를 통해서 간단하게 해당 키보드의 애니메이션 정보를 가져올수 있다.

- (void)keyboardWillShow:(NSNotification *)notification {
    NSLog(@"keyboard will show");
   
    NSTimeInterval keyboardAnimationDuration;
    UIViewAnimationCurve keyBroadAnimationNumber;

    NSValue* value = [notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    [value getValue:&keyboardAnimationDuration];
    
    value = [notification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
    [value getValue:&keyBroadAnimationNumber];
    
}

- (void)keyboardWillHide:(NSNotification *)notification {
    NSLog(@"keyboard will hide");
   
    NSTimeInterval keyboardAnimationDuration;
    UIViewAnimationCurve keyBroadAnimationNumber;

    NSValue* value = [notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    [value getValue:&keyboardAnimationDuration];
    
    value = [notification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
    [value getValue:&keyBroadAnimationNumber];
}
위와 같이 UIKeyboardAnimationDurationUserInfoKey와 UIKeyboardAnimationCurveUserInfoKey를 통해서 애니메이션 시간과 애니메이션 curve 정보를 얻어 올수 있고 이를 통해서 키보드가 나타날때와 사라질때 뷰를 관리해주면 키보드와 혼연일체로 움직이는것을 확인해 볼수 있을것이다.
 


반응형