我有一个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
类中自定义转换的一部分完成的。
最后我放弃了,并将附件视图添加为常规视图,使其遵循键盘。