UIView EmptyCollectionView
があります。これは、UICollectionViewが空のときに表示されます。これを機能させる方法は、ViewControllerのviewDidLoadでUIViewとaddSubview
を作成し、必要に応じてビュー(およびcollectionview)のトグルisHiddenプロパティを変更することです。
もう少し磨きたいのですが、コア機能が動作しているので、空のビューに含まれているサブビューに、含まれているimageview
をバウンスさせるなど、微妙なアニメーションを追加したくありません表示。
だから私の質問は、UIView
が表示されているときに検出する最良の方法は何ですか(つまり、使用できるviewDidAppear
タイプのコールバックがあるか)です。
補足質問:これは初めてです...空のビューを追加してisHiddenプロパティを切り替えることは、これを行う良い方法ですか?それとも別の方法でやるべきですか? (つまり、ビューを保持するのではなく、必要に応じてビューを作成および破棄する必要があります)
ありがとう
これでうまくいきました。ビューを非表示にするには:
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)
私の意見では、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() }
}
)
}
}
_
したがって、デフォルトの0.2秒アニメーションの場合はview.fadeIn()
を呼び出すか、またはview.fadeIn(1)
を呼び出して1秒持続させる必要があります。
完了イベントを追加することもできます。
_view.fadeOut(0.5, onCompletion: {
print("Animation completed, do whatever you want")
})
_
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.2, animations: {
self.alpha = hidden ? 0.0 : 1.0
}) { (complete) in
self.isHidden = hidden
}
} else {
self.isHidden = hidden
}
}
}
EmptyCollectionViewのalphaプロパティをアニメーション化して、非表示にする場合は0、表示する場合は1に設定できます。
UIView.animate(withDuration: 0.5) {
self.EmptyCollectionView.alpha = 0
}
isOpaqueプロパティがFalseに設定されていることを確認して、ビューの透明性を有効にします