如何使用自动布局锚点为UICollectionView设置动画?

时间:2018-08-02 10:47:10

标签: swift animation uicollectionview autolayout nslayoutconstraint

我正在尝试通过使用布局约束为collectionview设置动画,但是我无法使其正常工作。我有一个collectionview,它占据了整个屏幕,并且在单击按钮时我想实质上将其移动,以便为从底部进入的另一个视图腾出空间-请参见下面的图片

传入的UIView动画效果很好(视图从底部向上显示)-我要移动collectionview的原因是,传入的UIView会遮挡集合视图,因此我只是想在与新视图,这样就可以显示collectionview中的所有内容而不会被新视图隐藏-我使用参考视图来为collectionview Image to show what I am trying to achieve的最终位置获取正确的布局约束正确的方法吗?

下面的代码示例没有任何反应,我不确定从这里开始应该走什么地方-使用相同的方法为传入的视图设置动画,效果很好,但似乎不适用于collectionview ...

任何帮助将不胜感激

 var colViewBottomToReferenceTop: NSLayoutConstraint?
 var colViewBottomToViewBottom: NSLayoutConstraint?

    override func viewDidLoad() {
        super.viewDidLoad()

     colViewBottomToReferenceTop = musicCollectionView.bottomAnchor.constraint(equalTo: referenceView.topAnchor)   
     colViewBottomToViewBottom = musicCollectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor)

     NSLayoutConstraint.active([colViewBottomToViewBottom!])
     NSLayoutConstraint.deactivate([colViewBottomToReferenceTop!]) 

}

func playerShow() {
    NSLayoutConstraint.activate([colViewBottomToReferenceTop!])
  UIView.animate(withDuration: 0.5, animations: {
        self.view.layoutIfNeeded()
    })
}


@IBAction func btnTapped(_ sender: UIButton) {
    playerShow()
   }

1 个答案:

答案 0 :(得分:0)

您要在动画播放之前停用另一个

NSLayoutConstraint.deactivate([colViewBottomToViewBottom!]) 
NSLayoutConstraint.activate([colViewBottomToReferenceTop!])

查看此Demo