2014-04-30 3 views
1

Whatsapp 앱에서 UITextField 키 보드 관계를 모방하려고합니다. 대부분 알고 계신대로 UITextField이 화면 하단에 고정되어 있으며 UITextField을 탭하면 키보드가 나타납니다. 키보드가 올라 오면 UITextField이 키보드에 달라 붙어 매우 부드럽게 함께 움직입니다.Whatsapp 및 행 아웃과 같이 키보드로 TextField가 매끄럽게 푸시되지 않습니다.

키보드에서보기를 여러 번 움직이는 것에 대한 Apple의 설명서 페이지를 읽으십시오. 내가 지금까지 시도 무엇

:

  • 키보드 알림 들었다. 애니메이션 블록 내에서 setFrame:setContentOffset:animated: 메서드를 모두 사용했습니다. 예상대로 잘 작동하지 않았습니다. 키보드 애니메이션에있는 UIViewAnimationCurve 값은 7입니다. UIViewAnimationCurve에는 정수형 열거 형이 4 개뿐이므로 의미가 없습니다. 저는 키보드 애니메이션의 애니메이션 커브가 개발자들에게 제공되지 않는다고 생각합니다. 나는 틀렸다고 생각합니다.

  • 낮은 z- 색인 값을 사용하는 사용자 정의 inputAccessoryView 사용. 나는 정확하게 두 개의 UIViews을 가지고 있는데, 하나는 바닥에 고정되어 있고 다른 하나는 입니다. 고정 된 바닥 아래에 숨기고 자하는 것은 zPosition 값이 낮기 때문입니다. 따라서 사용자는 inputAccessoryView이 화면 외부에서 올라 오는 것을 보지 않을 것이지만 고정 된보기는 키보드로 밀어 올리고 있습니다. 그러나 다시 사용하지 마십시오. zPosition 값을 변경해도 아무런 변화가 없습니다.

마지막으로 Whatsapp은 시스템 키보드가 아니지만 사용자 지정 키보드를 사용하고있을 수도 있습니다. 그러나 이것이 사실이라면, 그것은 옵션이 제거되도록 디자인의 매우 나쁜 선택입니다.

누구나 Whatsapp (또는 행 아웃)이 어떻게 구현했는지 알 수 있습니다.

답변

2

가장 직접적인 방법은 올바른 방법으로 밝혀졌습니다.

알림이 발생하면 keyboardWillShow/keyboardWillHide 알림과 animateWithDuration:을 수신해야합니다. 내가 놓친 요점은 UIViewAnimationCurveUIViewAnimationOptionCurve에 (< < 16) 이동하여 캐스팅하는 것이 었습니다.

NSDictionary *notification = [aNotification userInfo]; 
UIViewAnimationOptions curveValue = [[info objectForKey:UIKeyboardAnimationCurveUserInfoKey] unsignedIntegerValue] << 16; 
... 
[UIView animateWithDuration:{animation duration} 
         delay:0 
        options:curveValue 
       animations:^{ 
        //animation code 
       } 
       completion:nil]; 
+0

당신이 내 일 친구를 만들어

[UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:[info[UIKeyboardAnimationDurationUserInfoKey] floatValue]]; [UIView setAnimationCurve:[userInfo[UIKeyboardAnimationCurveUserInfoKey] intValue]]; // set view frame here [UIView commitAnimations]; 

! – thndrkiss

1

값은 '7'(2)의 전력이 아니므로 그것은 오히려 하나 개 이상의 애니메이션 값의 합 (또는 비트 이상) 일 수 특정 애니메이션 값이 아니다. 솔루션 (나를 위해 작업)입니다 : 행운을 빕니다는 :)