UIViewフレームアニメーションの問題に陥る。ビューは原点とサイズの両方でアニメートされ、サイズは増加し、原点は直線的に移動して同じ場所にビューを維持します。しかし、何が起こるかは、ビューがサイズ(0,0)に減少し、それから正しいサイズではないサイズに増加するということです。添付のビデオを参照してください。問題のUIImageViewフレームが期待通りにアニメートされない(サイズと原点)
ビデオ:https://media.pairby.com/I/u/a/IualExcJXn7CqLsGkcNZfwyEw5MKi3SV/v.mp4
func animateIn() {
// Make _iconView large
let w = bounds.width
_iconView.frame = CGRect(
x: frame.midX - w/2,
y: frame.midY - w/2,
width: w, height: w)
isHidden = false
UIView.animate(withDuration: 0.2, animations: {
self.alpha = 1
// Animate it smaller
let w = self.bounds.width * 0.5
self._iconView.frame = CGRect(
x: self.frame.midX - w/2,
y: self.frame.midY - w/2,
width: w, height: w)
})
}
func animateOut() {
UIView.animate(withDuration: 3, delay: 0, options: .beginFromCurrentState, animations: {
self.alpha = 0
// Make it large again
let w = self.bounds.width
self._iconView.frame = CGRect(
x: self.frame.midX - w/2,
y: self.frame.midY - w/2,
width: w, height: w)
}, completion: { _ in self.isHidden = true })
}
詳細は:
self
はスーパーに拘束するUIViewのサブクラスです。
_iconView
UIImageView
animateIn
がanimateOut
animateOut
前に実行することが保証されているそれはあなたが必要とするすべては何をするか完全には明らかではありませんanimateIn
アニメーションの前に幅を半分にしたので実際にはあなたが思っていたものの半分(元のサイズ)に等しいことを忘れてしまったと思います。したがって、あなたは期待したサイズの半分にしか戻りません。 – torinpitchers
「_iconView」は「UIImageView」であり、「X」画像を持っていますか? 'self'は'メインビュー 'かサブクラス化された' UIView'ですか?ビューの全幅にXを「成長」させ、透明にフェードアウトさせようとしていますか? – DonMag
ねえ、@torinpitchers。私はスーパービュー(自己)の幅を半分にしていません。私は、計算を行うときにスーパービューの境界を使用します。 – Travo