iOS Swift - 像skype这样的底层菜单

时间:2015-02-12 16:33:40

标签: ios swift animation ios7 ios8

我想在Skype应用程序中创建底部菜单。 Example of Skype bottom menu

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

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

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

它工作正常,看起来不错。但我不确定这是否是正确的解决方案。如果没有更好的东西。这个动画是否正确完成?如果屏幕上有更多控件,它会运行良好吗?如果我想从开始然后缓慢结束更快的动画怎么办?感谢

1 个答案:

答案 0 :(得分:2)

这确实是为约束更改设置动画的推荐方法。我会建议你如何处理约束。

您应该让自动布局为您生成高度,而不是手动为视图指定高度,并使用固定到superview.bottom的约束来执行动画。

  1. 当用户点击你的UIBarButtonItem创建视图并将其添加到超级视图时,顶部约束为0到超级视图的底部。现在,视图定位在"下面"屏幕,但用户尚不可见。
  2. 在视图上调用layoutIfNeeded()以触发自动布局
  3. 使用CGRectGetHeight()获取高度,并使用它将顶部约束常量设置为此值的负数(例如-400)。
  4. 再次在动画区域内调用layoutIfNeeded(),视图将从屏幕底部向上滑动。
  5. 对于手势,您可以使用相同的方法,并使用UIGestureRecognizer方法translationInView()简单地相应地调整顶部约束的常量。

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

    另外 - 请参阅我对类似问题的其他答案: https://stackoverflow.com/a/28484328/1451954