动画UIView是隐藏的子视图

时间:2017-05-26 09:48:47

标签: ios swift uiview swift3

我有一个UIView EmptyCollectionView,当我的UICollectionView为空时我会显示它。我的工作方式是在ViewController的viewDidLoad中创建UIView和addSubview,然后根据需要更改视图(以及collectionview)的toggle属性。

我想稍微改善一下现在我的核心功能正常工作,我不想在我的空视图中包含的子视图中添加一些微妙的动画,例如制作包含的imageview反弹显示。

所以我的问题是,检测UIView何时被显示的最佳方法是什么(即我可以使用viewDidAppear类型的回调?)

补充问题:我是新手...添加空视图并切换isHidden属性这是一个很好的方法吗?或者我应该以不同的方式做到这一点? (即我应该根据需要创建和销毁视图,而不是保留它)

由于

4 个答案:

答案 0 :(得分:10)

这有效,希望它可以帮到你。隐藏视图:

UIView.animate(withDuration: 0.3/*Animation Duration second*/, animations: {
     self.EmptyCollectionView.alpha = 0
}, completion:  {
   (value: Bool) in
       self.EmptyCollectionView.isHidden = true
})

显示视图:

self.EmptyCollectionView.isHidden = false
UIView.animate(withDuration: 0.3, animations: {
         self.EmptyCollectionView.alpha = 1
    }, completion:  nil)

答案 1 :(得分:8)

我认为最好的方法是扩展UIView

extension UIView {

    func fadeIn(_ duration: TimeInterval? = 0.2, onCompletion: (() -> Void)? = nil) {
        self.alpha = 0
        self.isHidden = false
        UIView.animate(withDuration: duration!,
                       animations: { self.alpha = 1 },
                       completion: { (value: Bool) in
                          if let complete = onCompletion { complete() }
                       }
        )
    }

    func fadeOut(_ duration: TimeInterval? = 0.2, onCompletion: (() -> Void)? = nil) {
        UIView.animate(withDuration: duration!,
                       animations: { self.alpha = 0 },
                       completion: { (value: Bool) in
                           self.isHidden = true
                           if let complete = onCompletion { complete() }
                       }
        )
    }

}

因此,您只需调用view.fadeIn()即可获得默认的0.2秒动画,或调用view.fadeIn(1)使其持续一秒钟。

您甚至可以添加完成事件:

view.fadeOut(0.5, onCompletion: {
    print("Animation completed, do whatever you want")
})

答案 2 :(得分:4)

在任何UIView类上设置isHidden时,快速4.2扩展允许动画:

extension UIView {
    func setIsHidden(_ hidden: Bool, animated: Bool) {
        if animated {
            if self.isHidden && !hidden {
                self.alpha = 0.0
                self.isHidden = false
            }
            UIView.animate(withDuration: 0.25, animations: {
                self.alpha = hidden ? 0.0 : 1.0
            }) { (complete) in
                self.isHidden = hidden
            }
        } else {
            self.isHidden = hidden
        }
    }
}

答案 3 :(得分:0)

您可以将EmptyCollectionView的alpha属性设置为0以隐藏或将1显示为

UIView.animate(withDuration: 0.5) { 
    self.EmptyCollectionView.alpha = 0
}

还要确保将 isOpaque 属性设置为False才能启用视图的透明度