UIView动画从屏幕下方滑动到屏幕底部

时间:2017-08-08 04:21:14

标签: ios swift

我以编程方式创建了一个UIStackView,其中包含两个垂直堆叠的UICollectionView。其中一个是菜单栏,其中一个是显示媒体内容的网格。

let contentStack = UIStackView()
contentStack.addArrangedSubview(menuBar)
contentStack.addArrangedSubview(grid)
self.view.addSubview(contentStack)

点击按钮后,我希望UIStackView出现在屏幕底部。然而,当它出现时,我希望它做一个动画,所以它从屏幕下方向上滑动。我看过类似于我的帖子的旧解决方案,但我找不到任何有用的东西,因为我手动设置这样的约束:

contentStack.translatesAutoresizingMaskIntoConstraints = false
contentStackBotAnchor = contentStack.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
contentStackBotAnchor!.isActive = true
contentStack.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
contentStack.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
contentStack.axis = .vertical
contentStack.spacing = 0

我尝试过这样的解决方案:

UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
           self.contentStack.frame = CGRect.init(x: 0, y: self.view.frame.height - self.contentStack.frame.height, width: self.contentStack.frame.width, height: self.contentStack.frame.height)
        }, completion: nil)

这对我不起作用。

2 个答案:

答案 0 :(得分:4)

Reinier所述,您可以为约束设置动画。另一种选择可能是使用CGAffineTransform。加载视图时,只需更改UIStackView的y值,例如:

contentStack.transform = CGAffineTransform(translationX: 0, y: view.frame.height)

然后,当您想要为其设置动画时,请使用您选择的动画:

UIView.animate(withDuration: 0.5, animations: {
    contentStack.transform = .identity
})

在这种情况下,这是我更喜欢的,希望它有所帮助。

答案 1 :(得分:1)

如果你正在使用约束,那么你必须使用你的约束动画,试试这个,我不确定值但是必须像这样

self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
           contentStackBotAnchor.constant = (self.contentStack.bounds.size.height * -1)
           self.view.layoutIfNeeded()
        }, completion: nil)

希望这有帮助