2017-05-16 12 views
0

メインビューの一番下にボタンがあり、表示中にキーボードでアニメーション化したいと思います。私のボタンが私のストーリーボードでの制約で、このように設定されているキーボードでビュー(ボタン)をアニメ化する

enter image description here

私はコードで制約をリンクしている:キーボードが表示されているとき

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *myConstraint; 

は、通知を追加しました:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

そしてここにはkeyboardWillShow実装:それは動作しますが

- (void)keyboardWillShow: (NSNotification *)notification { 
    NSDictionary *dictionary = notification.userInfo; 
    CGRect keyboardFrame = [dictionary[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

    [UIView animateWithDuration:1.0f animations:^{ 
     self.myConstraint.constant = keyboardFrame.size.height + 18; 
    }]; 
} 

、ボタンはアニメーション化されませんが、代わりに、すぐにビュー上の新しい場所に設定されています。私は何が起こるかを見るために補完ブロックを追加しようとしましたが、実際には補完がすぐに呼び出されます。

何が問題なのですか?ご協力いただきありがとうございます。

答えて

3

アニメーションは、制約の変更によってトリガレイアウトである必要が事....

self.myConstraint.constant = keyboardFrame.size.height + 18; 
[self.view setNeedsUpdateConstraints]; 

[UIView animateWithDuration:1.0f animations:^{ 
    [self.view layoutIfNeeded]; 
}]; 
+0

ありがとう。 – Someday

0

UIViewの新しい制約値で更新したい場合は、layoutIfNeedが足りないと思います。

試してみてください。

+0

私はそれを試してみましたが、それはあなたの答えのために – Someday

0

アニメーションの遅延を0.3に減らそうとします。キーボードのスピードアニメーションは、ボタンのスピードアニメーションよりも大きくなります。

setNeedsLayoutをボタンに追加する必要があります。

+0

おかげで動作しません。 NSNumber:NSNumber * duration = dictionary [UIKeyboardAnimationDurationUserInfoKey] 'としてキーボードの非表示/表示時間を取得することで改善しました。このように' animateWithDuration :[期間doubleValue] '。 – Someday

+0

それは良い考えです。ありがとうございました。 – pluzzmo

関連する問題