我有一个UIView EmptyCollectionView
,当我的UICollectionView为空时我会显示它。我的工作方式是在ViewController的viewDidLoad中创建UIView和addSubview
,然后根据需要更改视图(以及collectionview)的toggle属性。
我想稍微改善一下现在我的核心功能正常工作,我不想在我的空视图中包含的子视图中添加一些微妙的动画,例如制作包含的imageview
反弹显示。
所以我的问题是,检测UIView
何时被显示的最佳方法是什么(即我可以使用viewDidAppear
类型的回调?)
补充问题:我是新手...添加空视图并切换isHidden属性这是一个很好的方法吗?或者我应该以不同的方式做到这一点? (即我应该根据需要创建和销毁视图,而不是保留它)
由于
答案 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才能启用视图的透明度