将动画与带有附件视图的键盘顶部同步



我有一个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类中自定义转换的一部分完成的。

最后我放弃了,并将附件视图添加为常规视图,使其遵循键盘。

最新更新