使用自动布局为动画准备视图
Posted
技术标签:
【中文标题】使用自动布局为动画准备视图【英文标题】:Prepare views for animations, using Autolayout 【发布时间】:2014-11-30 19:09:47 【问题描述】:我目前正在开发一个应用程序,我想在页面上添加一个动画:视图控制器 1。在这个视图控制器 1 中,我添加了一个容器:容器 1。这个容器在视图时应该超出框架将出现并在用户操作后变为可见。
这就是我在故事板中的视图控制器 1 的样子:
因为我使用的是自动布局,所以我想在视图控制器 1 出现时使用约束来隐藏容器 1。因此,我将容器 1 的约束 Top 连接到我的视图控制器 1 类。
我的第一个问题 - 内部问题
在这个类和方法viewWillLayoutSubviews中,我把这个约束的常量改成了容器1的-height:
override func viewWillLayoutSubviews()
self.container1TopLayout.constant = -self.container1.frame.height
我还添加了一个带有其操作的按钮:showContainer
func showContainer()
self.container1TopLayout.constant = 0
UIView.animateWithDuration(1.0, animations: () -> Void in
self.newCustomServiceContainer.layoutIfNeeded()
)
在这种方法中,我将常量更改为零。但是视图没有显示。
第二个问题 - 正常工作
如果在我的故事板中,我将容器 1 的位置更改为在用户点击操作按钮之前已经在框架之外。当用户点击按钮时,容器 1 正确显示;我用了同样的方法showContainer
你能告诉我,我在第一期做错了什么吗?也许我不应该在 viewWillLayoutSubviews 中设置常量?
提前谢谢你
【问题讨论】:
【参考方案1】:就我而言,我这样做:
override func viewDidLoad()
prepareContainer()
override func viewDidAppear(animated: Bool)
showContainer()
【讨论】:
以上是关于使用自动布局为动画准备视图的主要内容,如果未能解决你的问题,请参考以下文章
uiscrollview的自动布局,视图层次结构没有为约束做好准备
使用NSView.layoutSubtreeIfNeeded()动画自动布局约束不适用于macOS High Sierra