动画UIView是隐藏的子视图

TRG*_*TRG 11 uiview ios swift swift3

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

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

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

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

谢谢

小智 12

这项工作,我希望它可以帮助你.要隐藏视图:

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

要显示视图:

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


And*_*Guy 12

我认为最好的方法是扩展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() }
                       }
        )
    }

}
Run Code Online (Sandbox Code Playgroud)

所以你只需要调用view.fadeIn()默认的0.2秒动画,或者view.fadeIn(1)让它持续一秒钟.

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

view.fadeOut(0.5, onCompletion: {
    print("Animation completed, do whatever you want")
})
Run Code Online (Sandbox Code Playgroud)


Mar*_*ark 7

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

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Moh*_*afa 3

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

UIView.animate(withDuration: 0.5) { 
    self.EmptyCollectionView.alpha = 0
}
Run Code Online (Sandbox Code Playgroud)

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