首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速模拟动画:动画

快速模拟动画:动画
EN

Stack Overflow用户
提问于 2015-08-07 11:12:40
回答 2查看 116关注 0票数 0

我正在使用self.navigationController?.setNavigationBarHidden(true, animated: true)

我想知道在哪里可以看到动画是如何在代码中构建的?我想用另一个自定义UIView来模仿它的行为。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 11:27:21

动画只是一个幻灯片,所以创建了一个动画,它改变了动画视图的y原点。

如果使用自动布局,则应该有一个top约束,该约束指定视图的顶部y位置等于superview的顶部y位置。您可以使用NSLayoutConstraint引用这些@IBOutlet,就像使用其他情节提要元素一样,因此在视图控制器中:

代码语言:javascript
复制
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()强制子视图立即布局。

综合起来,您的动画方法可能如下所示:

代码语言:javascript
复制
class MyViewController {

    // ...

    func animateViewUp() {
        UIView.animateWithDuration(0.3) {
            self.topConstraint.constant = -self.viewToAnimate.bounds.height
            self.view.layoutIfNeeded()
        }
    }        
}

实际上,您可能会指定一个允许在显示/隐藏状态之间切换的方法,但是上面的代码应该会让您开始工作。

*注意:检查在约束周围指定了哪条路!如果约束是按照您的superview指定的,那么负的constant将向下移动子视图!

票数 1
EN

Stack Overflow用户

发布于 2015-08-07 11:25:06

简短的回答:你不能。苹果的框架的源代码没有提供。然而,他们的大部分动画都建立在我们第三方开发人员使用的同一核心动画框架之上。

这会产生什么效果呢?我不确定我是否在适当的视图控制器上动过导航条。你能贴出动画的GIF吗?如果我知道它是什么样子的话,我也许可以告诉你它是怎么做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31876356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档