2016-08-18 6 views
1

この質問はthisと似ていますが、私はその質問の回答に従っていましたが、私は働かなかったので、最初の実行(キーボードが表示されているとき)でアニメーションが滑らかでない

キーボードの高さを取得するための

通知オブザーバーキーボードの状態のため

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LaunchScreenViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil) 

機能:ビューと私はキーボードが、これは私のコードで表示されたときにそれを移動したいです

func keyboardWillShow(notification:NSNotification) { let userInfo:NSDictionary = notification.userInfo! duration = (notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double) let keyboardFrame:NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue let keyboardRectangle = keyboardFrame.CGRectValue() keyboardHeight = keyboardRectangle.height } 

私のアニメーション

func textFieldDidBeginEditing(textField: UITextField) { 

    self.nextButtonConstraint.constant = keyboardHeight 
    UIView.animateWithDuration(duration) { 
     self.nextButton.layoutIfNeeded() 
     self.emailTextField.layoutIfNeeded() 

    } 

} 

あなたはそれを入れて同様のquestion'の回答によれば、(最初の実行であり、問​​題を解決するが、それでもますので、私のアニメーションがtextFieldDidBeginEditing上にあることを見ることができるようにキーボードが最初に表示されます)私のアニメーションが滑らかではありません

+0

このコードは 'UIViewController'サブクラス内にありますか? 'nextButton'と' emailTextField'でそれを呼び出すのではなく、 'self.view.layoutIfNeeded'を呼び出してみてください。 – Connor

+0

@ ConnorNeville、応答する人のためにありがとう、彼らは 'UIViewController'クラスの中にあり、私はあなたの提案をまだ変更していませんでした –

+0

うーん。 'keyboardDidShow'のための別の' NSNotificationCenter'オブザーバを追加し、あなたのアニメーションをそこに入れてみてください。 – Connor

答えて

0

私は解決策がかなり簡単かもしれないと思います。 この内部のすべてのあなたのコードを配置しようとすると:

DispatchQueue.main.async{ 
    // Your Code here 
    } 

これは、それをスピードアップし、滑らかでなく、アニメーションを避ける必要があり、メインスレッドにアニメーションを移動します。

関連する問題