iOS Swift - 类似于 Skype 的底部菜单

iOS Swift - bottom menu like skype

我想像 Skype 应用程序一样创建底部菜单。

它应该在底部有一些图标,它可以向上滑动显示更多项目。

我创建的是具有高度限制的 UIView。当有滑动手势或点击点时,我会更改菜单视图的约束:

topMenuViewHeightConstraint.constant = 200;
UIView.animateWithDuration(0.5) {
    self.view.layoutIfNeeded()
}

它正在运行并且看起来不错。但我不确定这是否是正确的解决方案。如果没有更好的东西。该动画是否以正确的方式完成?如果屏幕上有更多控件,效果会更好吗?如果我想要更快的动画开始然后缓慢结束怎么办?谢谢

这确实是对约束变化进行动画处理的推荐方式。我建议您对约束的处理方式稍作改变。

与其手动为视图分配高度,不如让自动布局为您生成高度,并使用固定到 superview.bottom 的约束来执行动画。

  1. 当用户点击您的 UIBarButtonItem 时,创建视图并将其添加到超级视图,顶部约束为 0 到超级视图的底部。现在视图位于 "below" 屏幕上,用户还看不到。
  2. 在视图上调用 layoutIfNeeded() 以触发自动布局
  3. 使用 CGRectGetHeight() 获取高度并使用它将顶部约束的常量设置为该值的负数(例如 -400)。
  4. 在动画块中再次调用 layoutIfNeeded(),视图将从屏幕底部向上滑动。

对于手势,您可以使用相同的方法并简单地使用 UIGestureRecognizer 方法 translationInView() 相应地调整顶部约束的常量。

另一种不需要在代码中引用高度的方法是删除顶部约束并向 superview.bottom 添加底部约束。

另请参阅我对类似问题的其他回答: