UITextField
にアクセサリビューがあります。私はまた、画面の下部にある別のビューを持っています。私はUIKeyboardWillShowNotification
を利用してキーボードの表示に合わせてこのビューをアニメーション化したいと思っています。しかし、今回は、底面図をアクセサリビューの上部ではなくキーボードの上部に沿わせたいので、少し特殊です。アクセサリビューのキーボードの上部にアニメーションを同期
[UIView animateWithDuration:keyboardAnimationDuration delay:0 options:keyboardAnimationCurve animations:^{
viewBottomConstraint.constant = keyboardHeight - accessoryViewHeight;
[self.overviewViewController.view layoutIfNeeded];
} completion:nil];
このソリューションは、私の下の正しい終了位置を与える
(keyboardAnimationDuration
、keyboardAnimationCurve
とkeyboardHeight
すべては、キーボード通知のuserInfo
辞書から来る):
はもちろん、私は、このソリューションを試してみましたキーボード(アクセサリビューを含む)は、同じ持続時間(キーボードの上部ではなくアクセサリビューの上部)でより長い距離を横断しなければならないので、アニメーションはわずかにオフです。
私はこのような私の底面図のための相対的なアニメーションの再生時間を計算すると考えられています
keyboardToAccessoryRatio = (keyboardHeight - accessoryViewHeight)/keyboardHeight
relativeDuration = keyboardAnimationDuration * keyboardToAccessoryRatio
そしてkeyboardAnimationDuration - relativeDuration
の遅延とアニメーションの開始を持っています。しかし、キーボードがUIViewAnimationOptionCurveLinear
カーブを使用していた場合にのみうまく動作しますが、実際にはUIViewAnimationCurveEaseInOut
を使用しています。
その他の提案はありますか?
PS。アクセサリビューにボタンビューを追加するだけでは、実際には別のビューコントローラにボタンを追加することはできません。アニメーションは、UIViewControllerAnimatedTransitioning
クラス内のカスタムトランジションの一部として行われます。
私が理解しているように、0.5または1のようなアニメーションにいくらかの遅延を与えて、それが合うかどうかを調べることができます。 –
アニメーション曲線のため、慎重な計算をしてもフィットしません。 – pajevic