2017-09-06 7 views
4

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のサブクラスです。

_iconViewUIImageView

animateInanimateOut

animateOut前に実行することが保証されているそれはあなたが必要とするすべては何をするか完全には明らかではありませんanimateIn

+1

アニメーションの前に幅を半分にしたので実際にはあなたが思っていたものの半分(元のサイズ)に等しいことを忘れてしまったと思います。したがって、あなたは期待したサイズの半分にしか戻りません。 – torinpitchers

+0

「_iconView」は「UIImageView」であり、「X」画像を持っていますか? 'self'は'メインビュー 'かサブクラス化された' UIView'ですか?ビューの全幅にXを「成長」させ、透明にフェードアウトさせようとしていますか? – DonMag

+0

ねえ、@torinpitchers。私はスーパービュー(自己)の幅を半分にしていません。私は、計算を行うときにスーパービューの境界を使用します。 – Travo

答えて

0

の作品、期待通りに動作しない機能ですしかし、...

  1. あなたは、そもそものサイズを変更する必要はありません - あなたは、単に現在の状態から_iconViewフレームをアニメーション化し、

  2. でき_iconViewがselfサブビューですので、あなたが境界に対するそれを配置する必要があります、フレームではありません。

このようにそれを試してみてください。

func doAnim() -> Void {  

    UIView.animate(withDuration: 3, delay: 0, options: .beginFromCurrentState, animations: { 
     self.alpha = 0 

     let s = self.bounds.width 
     let halfS = s/2 

     self._iconView.frame = CGRect(
      x: self.bounds.midX - halfS, 
      y: self.bounds.midY - halfS, 
      width: s, 
      height: s) 

    }) 

} 
0

layoutSubviews()機能からのすべての_iconView関連するコードを削除することによってそれを解決しました。私はなぜそれが最初に呼ばれたのか分からない。

関連する問題