【问题标题】:Synchronise animation with top of a keyboard with accessory view将动画与带有附件视图的键盘顶部同步
【发布时间】:2017-11-09 09:28:39
【问题描述】:

我有一个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

还有其他建议吗?

附言。我不能简单地将我的按钮视图添加到附件视图中,因为它们实际上位于单独的视图控制器中。动画是作为UIViewControllerAnimatedTransitioning 类中自定义过渡的一部分完成的。

【问题讨论】:

  • 据我了解,您可以给动画一些延迟,例如 0.5 或 1,然后看看是否合适。
  • 由于动画曲线的原因,即使经过仔细计算也不适合。

标签: ios objective-c animation


【解决方案1】:

最后我放弃了,将附件视图添加为我按照键盘制作的常规视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2014-02-14
    • 2014-11-23
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多