web-dev-qa-db-ja.com

UIView isHiddenサブビューのアニメーション化

UIView EmptyCollectionViewがあります。これは、UICollectionViewが空のときに表示されます。これを機能させる方法は、ViewControllerのviewDidLoadでUIViewとaddSubviewを作成し、必要に応じてビュー(およびcollectionview)のトグルisHiddenプロパティを変更することです。

もう少し磨きたいのですが、コア機能が動作しているので、空のビューに含まれているサブビューに、含まれているimageviewをバウンスさせるなど、微妙なアニメーションを追加したくありません表示。

だから私の質問は、UIViewが表示されているときに検出する最良の方法は何ですか(つまり、使用できるviewDidAppearタイプのコールバックがあるか)です。

補足質問:これは初めてです...空のビューを追加してisHiddenプロパティを切り替えることは、これを行う良い方法ですか?それとも別の方法でやるべきですか? (つまり、ビューを保持するのではなく、必要に応じてビューを作成および破棄する必要があります)

ありがとう

11
TRG

これでうまくいきました。ビューを非表示にするには:

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)
8
Mert YILDIZ

私の意見では、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")
})
_
6
AndroidGuy

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
        }
    }
}
1
Mark

EmptyCollectionViewのalphaプロパティをアニメーション化して、非表示にする場合は0、表示する場合は1に設定できます。

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

isOpaqueプロパティがFalseに設定されていることを確認して、ビューの透明性を有効にします

0
Mohamed Mostafa