2017-11-09 4 views
1

UITextFieldにアクセサリビューがあります。私はまた、画面の下部にある別のビューを持っています。私はUIKeyboardWillShowNotificationを利用してキーボードの表示に合わせてこのビューをアニメーション化したいと思っています。しかし、今回は、底面図をアクセサリビューの上部ではなくキーボードの上部に沿わせたいので、少し特殊です。アクセサリビューのキーボードの上部にアニメーションを同期

[UIView animateWithDuration:keyboardAnimationDuration delay:0 options:keyboardAnimationCurve animations:^{ 
     viewBottomConstraint.constant = keyboardHeight - accessoryViewHeight; 
     [self.overviewViewController.view layoutIfNeeded]; 
} completion:nil]; 

このソリューションは、私の下の正しい終了位置を与える

keyboardAnimationDurationkeyboardAnimationCurvekeyboardHeightすべては、キーボード通知のuserInfo辞書から来る):

はもちろん、私は、このソリューションを試してみましたキーボード(アクセサリビューを含む)は、同じ持続時間(キーボードの上部ではなくアクセサリビューの上部)でより長い距離を横断しなければならないので、アニメーションはわずかにオフです。

私はこのような私の底面図のための相対的なアニメーションの再生時間を計算すると考えられています

keyboardToAccessoryRatio = (keyboardHeight - accessoryViewHeight)/keyboardHeight 
relativeDuration = keyboardAnimationDuration * keyboardToAccessoryRatio 

そしてkeyboardAnimationDuration - relativeDurationの遅延とアニメーションの開始を持っています。しかし、キーボードがUIViewAnimationOptionCurveLinearカーブを使用していた場合にのみうまく動作しますが、実際にはUIViewAnimationCurveEaseInOutを使用しています。

その他の提案はありますか?

PS。アクセサリビューにボタンビューを追加するだけでは、実際には別のビューコントローラにボタンを追加することはできません。アニメーションは、UIViewControllerAnimatedTransitioningクラス内のカスタムトランジションの一部として行われます。

+0

私が理解しているように、0.5または1のようなアニメーションにいくらかの遅延を与えて、それが合うかどうかを調べることができます。 –

+0

アニメーション曲線のため、慎重な計算をしてもフィットしません。 – pajevic

答えて

0

最後に私はあきらめて、キーボードに従う通常のビューとしてアクセサリービューを追加しました。

関連する問題