动画子视图控制器视图

Posted

技术标签:

【中文标题】动画子视图控制器视图【英文标题】:Animating child view controller view 【发布时间】:2019-12-14 18:47:17 【问题描述】:

我有一个子视图控制器,我想在父视图控制器上添加一个按钮。单击按钮时,我希望子 VC 从屏幕底部显示到屏幕的一半。 我试图为高度约束设置动画,但由于某种原因,它不会从屏幕底部开始。所以动画看起来很奇怪。它从底部上方开始并上下移动,直到达到我指定的恒定值。 这就是我所拥有的:

    func setChildVC() 
    self.addChild(childVC)
    mainView.addSubview(childVC.view)

    childVC.didMove(toParent: self)
    childVC.view.translatesAutoresizingMaskIntoConstraints = false

    heightAnchor =             childVC.view.heightAnchor.constraint(equalToConstant: 0)

    NSLayoutConstraint.activate([
        childVC.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
        childVC.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
        childVC.view.bottomAnchor.constraint(equalTo: mainView.bottomAnchor),
        heightAnchor,
    ])

这就是我为高度设置动画的方式(目前在 viewDidLoad 上):

self.heightAnchor.constant = 350
UIView.animate(withDuration: 2) 
        self.childVC.view.layoutIfNeeded()

我尝试将childVC.view 的 y 轴设置在屏幕下方,但由于限制它不起作用。

【问题讨论】:

【参考方案1】:

替换

self.childVC.view.layoutIfNeeded()

self.mainView.layoutIfNeeded()

为了正确测试它不要在viewDidLoad里面尝试它太早了,为了不同的屏幕高度也这样做

self.heightAnchor.constant = self.view.frame.height / 2.0

【讨论】:

以上是关于动画子视图控制器视图的主要内容,如果未能解决你的问题,请参考以下文章

在过渡期间动画子视图控制器的视图

使用容器视图控制器,如何在子视图控制器之间添加交互式动画?

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

使用 CATransition 同时动画两个子视图的过渡

如何检查子视图控制器是不是存在

CATransition:视图替换动画:子视图的增删查改