2015-01-06 39 views
-2

我在製作一個消息應用程序。當顯示鍵盤時,我想讓UITextField與它一起向上移動,就像在Messages應用程序中一樣。但是,我的動畫調用不起作用。它沒有動畫textInputView,因爲它應該,但後,仍然調用完成塊:UIView.animateWithDuration不起作用

func keyboardWasShown(aNotification: NSNotification) 
{ 
    var info = aNotification.userInfo! as Dictionary<NSObject,AnyObject> 
    var kbSize = info[UIKeyboardFrameEndUserInfoKey]?.CGRectValue().size 

    UIView.animateWithDuration(0.2, animations: {() -> Void in 

     self.textInputView.frame.origin.y = self.view.frame.height - self.textInputView.frame.height - kbSize!.height 


     println("Should move textInputView to: \(self.textInputView.frame.origin.y)") 

     }) { (bool) -> Void in 


      println("Location of textInputView.frame.origin.y after animation: \(self.textInputView.frame.origin.y)") 

    } 
} 

當我運行這段代碼,它打印:

應該移動到textInputView.frame.origin.y:297.0

動畫後textInputView.frame.origin.y的

地點:521.0

爲什麼沒有動畫?

+0

它在做什麼?住在同一個地方?移動沒有動畫? – jrturton

+0

你爲什麼試圖改變'完成'封閉的框架? – akashivskyy

+0

@akashivskyy是正確的,但如果您使用自動佈局,對幀的更改可能根本無法工作。 – Linuxios

回答

1

你的問題寫得很差(並且你不清楚你在問什麼),但我注意到一個非常常見的錯誤。您正嘗試設置框架的單獨屬性,而不是更改整個框架。

你的方法應該是這樣的:

func keyboardWasShown(notification: NSNotification) { 

    let userInfo = notification.userInfo! 
    let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue().size.height 

    UIView.animateWithDuration(0.2, animations: { 

     var frame: CGRect = textInputView.frame 
     frame.origin.y = CGRectGetMaxY(view.frame) - CGRectGetMaxY(textInputView.frame) - keyboardHeight 

     textInputView.frame = frame // change the whole frame 

    }, completion: nil) 

} 

請諮詢一些UIKit的101個教程更多的解釋。

0

問題在於關閉。如果您發現您的關閉:

{ (bool) -> Void in 


     println("Location of textInputView.frame.origin.y after animation: \(self.textInputView.frame.origin.y)") 

} 

是外:

UIView.animateWithDuration(0.2, animations: {() -> Void in 

    self.textInputView.frame.origin.y = self.view.frame.height - self.textInputView.frame.height - kbSize!.height 


    println("Should move textInputView to: \(self.textInputView.frame.origin.y)") 

    }) 

蘋果的Xcode 6.1的智能感知很差至於倒閉關注。嘗試手動編寫閉包,而不是使用智能感知建議單擊或按下輸入。

+1

是不是隻是尾隨閉包語法? –

+0

它應該是,但並不與我一起工作。這種變化之後效果很好。關閉功能不被接受。看'('')'即函數的作用域。 –