web-dev-qa-db-ja.com

UIStackView-サブビューを非表示にしてアニメーションで折りたたむ

私は次のようにUIStackViewのサブビューを非表示にしようとしています:

UIViewPropertyAnimator.runningPropertyAnimator(withDuration: 2.0, 
      delay: 0, options: [.curveEaseOut], animations: {
    self.label.isHidden = true
    self.label.alpha = 0.0
    self.stackView.layoutIfNeeded()
})

ただし、このコードを使用すると、ラベルはすぐに消えます。これは、折りたたみに必要なisHiddenをtrueに設定したためと考えられます。

UIStackViewのサブビューをアニメーションで非表示にして折りたたむ方法はありますか?または、UIStackViewをまったく使用しない方が良いでしょうか?

7
Andrey Gordeev

animateKeyframesでシンプルなソリューションを使用してアルファをフェードしてから非表示にすることができます。これにより、必要なものが得られると思います。1秒後と0.8秒後にフェードします。

// showLabelはBoolであり、ステータスを処理してファイルで宣言します

@IBAction func toggleStackLabelTapped(_ sender: UIButton) {

    showLabel = !showLabel

    UIView.animateKeyframes(withDuration: 1, delay: 0, options: .calculationModeLinear, animations: {
        UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.8) {
            self.label.alpha =  (self.showLabel) ? 1 : 0
        }
        UIView.addKeyframe(withRelativeStartTime: 0.8, relativeDuration: 1) {
            self.label.isHidden = !self.showLabel
        }

    })
}
0