2014-04-30 49 views
1

我試圖模仿UITextField-在Whatsapp應用程序中的鍵盤關係。 正如大多數人所知,屏幕底部有一個固定的UITextField,當您點擊UITextField時,鍵盤出現。當鍵盤彈起時,UITextField粘在鍵盤上,它們非常平滑地滑動在一起。TextField不能通過鍵盤順利推起,就像在Whatsapp和環聊

請閱讀Apple的文檔頁面,這些頁面是關於在鍵盤下移動視圖的幾次。

我迄今爲止嘗試:

  • 點擊鍵盤通知。我在動畫塊中使用了setFrame:setContentOffset:animated:方法。沒有達到預期的效果。鍵盤動畫具有的UIViewAnimationCurve值是7,我找不到它的含義,因爲UIViewAnimationCurve只有4個整數枚舉類型。我認爲鍵盤動畫的動畫曲線沒有提供給開發者,我希望我錯了。

  • 使用具有較低z-index值的自定義inputAccessoryView。我有兩個確切的UIViews,一個固定在底部,另一個是自定義inputAccessoryView,它將隱藏在固定的下方,因爲它具有較低的值zPosition值。因此,用戶不會看到屏幕外面出現inputAccessoryView,但固定視圖被鍵盤推高。但再次沒用。更改zPosition值不會改變任何內容。

最後,我認爲Whatsapp可能不會使用系統鍵盤,而是自定義鍵盤。但是如果是這樣的話,這是一個非常糟糕的設計選擇,所以選項被淘汰。

任何人都知道Whatsapp(或環聊)如何實現?

回答

2

這樣做的最直接的方式竟然是正確的方法。

我應該聽到keyboardWillShow/keyboardWillHide通知和animateWithDuration:,因爲它們被觸發。我錯過的點是通過轉換(< < 16)將UIViewAnimationCurve轉換成UIViewAnimationOptionCurve

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

你讓我很快樂!哥們 – thndrkiss

1

值「7」不是2的冪,所以它不是一個特定的動畫值,而它可以是多於一個的動畫值的總和(或按位或)。 解決方案(爲我工作)是:

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

祝你好運:)