UIView的自下而上的动画问题(UIView bottom to top animation is

2019-09-25 19:29发布

这是我使用动画视图从上到下,反之亦然一个简单的函数(如果是从上到下的动画和其他的底部到顶部动画):

@objc func openMenu(sender: UIButton) {
        if sender.tag == 1 {
            self.buttonView.tag = 2
             self.moduleView = ModulesCollectionView(frame: CGRect(x: 0, y: self.frame.origin.y + self.frame.size.height + 20, width: UIScreen.main.bounds.size.width, height: 0), collectionViewLayout: UICollectionViewLayout())
            self.window?.addSubview(self.moduleView)
            UIView.animate(withDuration: 0.7, animations: {
                self.moduleView.frame = CGRect(x: 0, y: self.frame.origin.y + self.frame.size.height + 20, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - self.frame.size.height - 22)
            }, completion: { _ in

            })

        } else {
            self.buttonView.tag = 1
            UIView.animate(withDuration: 3, animations: {
                self.moduleView.frame = CGRect(x: 0, y: self.frame.origin.y + self.frame.size.height + 20, width: UIScreen.main.bounds.size.width, height: 0)
            }, completion: { _ in
                self.moduleView.removeFromSuperview()
            })
        }
    }  

热门动漫作品很好,认为是从顶部愉快的0.7秒动画上下。 然而,从下到上的动画不会发生。 该视图立即删除。 这是我得到的结果:

但我想,同时从底部到顶部以及动画是干净的。 就像这里

二级:我终于打算实现的是PullUpController具有完全相反的动画。 因此,如果有人知道类似的库(下拉拖动)可以共享有投入。

更新 :问题与UICollectionView只有到来。 我取代的CollectionView用一个简单的UIView和它的工作完美。

Answer 1:

你应该尝试使用layoutSubViews()在动画块结束方法之后。 改变这样的动画块。

因为如果块:

self.moduleView.frame = CGRect(x: 0, y: self.frame.origin.y + self.frame.size.height + 20, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height - self.frame.size.height - 22)
self.moduleView.layoutSubviews()

对于else块:

self.moduleView.frame = CGRect(x: 0, y: self.frame.origin.y + self.frame.size.height + 20, width: UIScreen.main.bounds.size.width, height: 0)
self.moduleView.layoutSubviews()


Answer 2:

下面是示例代码,希望这将有助于。

显示视图:

self.containerView = ModulesCollectionView(frame: UIScreen.main.bounds)
self.containerView.center = CGPoint(x: self.view.center.x,
        y: self.view.center.y + self.view.frame.size.height)
self.window?.addSubview(self.moduleView)
self.window?.bringSubview(toFront: self.moduleView)
self.window?.endEditing(true)
UIView.animate(withDuration: 0.3, delay: 0.0,
    usingSpringWithDamping: 0.7, initialSpringVelocity: 3.0,
    options: .allowAnimatedContent, animations: {
    self.moduleView.center = self.view.center
}) { (isFinished) in
    self.view.layoutIfNeeded()
}

隐藏的看法:

UIView.animate(withDuration: 0.7, delay: 0.0,
    usingSpringWithDamping: 1, initialSpringVelocity: 1.0,
    options: .allowAnimatedContent, animations: {
    self.moduleView.center = CGPoint(x: self.view.center.x,
    y: self.view.center.y + self.view.frame.size.height)
}) { (isFinished) in
    self.moduleView.removeFromSuperview
}


文章来源: UIView bottom to top animation issue