我正在使用self.navigationController?.setNavigationBarHidden(true, animated: true)
我想知道在哪里可以看到动画是如何在代码中构建的?我想用另一个自定义UIView来模仿它的行为。
发布于 2015-08-07 11:27:21
动画只是一个幻灯片,所以创建了一个动画,它改变了动画视图的y原点。
如果使用自动布局,则应该有一个top约束,该约束指定视图的顶部y位置等于superview的顶部y位置。您可以使用NSLayoutConstraint引用这些@IBOutlet,就像使用其他情节提要元素一样,因此在视图控制器中:
class MyViewController {
@IBOutlet var viewToAnimate: UIView!
@IBOutlet var topConstraint: NSLayoutConstraint!
}您将注意到,NSLayoutConstraint有一个constant属性,它仅指定在使用该约束计算结果布局框架时要添加到第二个约束属性的值。因此,在topConstraint的例子中,您想要添加-viewToAnimate.bounds.height*,这样视图的底部就位于superview顶部看不到的位置。
使用UIView类方法animateWithDuration(_:animations:)动画化更改--在animation闭包中更改的任何可动画UIView属性都将在指定的duration上动画化。但是,当您更改约束的constant属性时,视图属性在对视图执行另一个布局传递之前不会更改。您可以使布局无效,并让布局在下一次通过view.setNeedsLayout()时隐式进行,但我们需要在视图的动画块中进行布局传递,这样动画才能正常工作。因此,您可以使用layoutIfNeeded()强制子视图立即布局。
综合起来,您的动画方法可能如下所示:
class MyViewController {
// ...
func animateViewUp() {
UIView.animateWithDuration(0.3) {
self.topConstraint.constant = -self.viewToAnimate.bounds.height
self.view.layoutIfNeeded()
}
}
}实际上,您可能会指定一个允许在显示/隐藏状态之间切换的方法,但是上面的代码应该会让您开始工作。
*注意:检查在约束周围指定了哪条路!如果约束是按照您的superview指定的,那么负的constant将向下移动子视图!
发布于 2015-08-07 11:25:06
简短的回答:你不能。苹果的框架的源代码没有提供。然而,他们的大部分动画都建立在我们第三方开发人员使用的同一核心动画框架之上。
这会产生什么效果呢?我不确定我是否在适当的视图控制器上动过导航条。你能贴出动画的GIF吗?如果我知道它是什么样子的话,我也许可以告诉你它是怎么做的。
https://stackoverflow.com/questions/31876356
复制相似问题