动画 UIView isHidden 子视图
Posted
技术标签:
【中文标题】动画 UIView isHidden 子视图【英文标题】:Animating UIView isHidden subviews 【发布时间】:2017-05-26 09:48:47 【问题描述】:我有一个 UIView EmptyCollectionView
,当我的 UICollectionView 为空时显示。我的工作方式是在 ViewController 的 viewDidLoad 中创建 UIView 和 addSubview
,然后根据需要更改视图(以及集合视图)的切换 isHidden 属性。
现在我想稍微润色一下,我的核心功能正在运行,我不想在我的空视图中包含的子视图中添加一些微妙的动画,例如使包含的 imageview
反弹显示。
所以我的问题是,检测UIView
何时显示的最佳方法是什么(即是否有我可以使用的viewDidAppear
类型回调)?
补充问题:我是新手...添加空视图并切换 isHidden 属性是一种好方法吗?还是我应该以不同的方式来做? (即我是否应该根据需要创建和销毁视图,而不是保留它)
谢谢
【问题讨论】:
您可以为UIView
约束更改或UIView
alpha 设置动画
【参考方案1】:
我认为最好的方法是扩展 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】:这行得通,我希望它可以帮助你。隐藏视图:
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)
【讨论】:
我可以在 ShowView 完成中知道:为什么你没有将 .isHidden 设置为再次回退??【参考方案3】:在任何 UIView 类上设置 isHidden 时允许动画的 Swift 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
【讨论】:
【参考方案4】:您可以将 EmptyCollectionView 的 alpha 属性设置为 0 隐藏或 1 显示
UIView.animate(withDuration: 0.5)
self.EmptyCollectionView.alpha = 0
还要确保 isOpaque 属性设置为 False 以启用视图的透明度
【讨论】:
但我想动画子视图而不是视图本身。我的 emptyview 包含一个 imageview,当 emptyview 显示或隐藏时,我想为 imageview 设置动画。我通过添加设置self.isHidden
并执行动画的显示和隐藏函数来修复它。烦人,因为现在有些视图使用 isHidden = false
而其他视图使用 view.show()
,看起来有点乱,但现在可以使用以上是关于动画 UIView isHidden 子视图的主要内容,如果未能解决你的问题,请参考以下文章