2016-06-29 8 views
0

ビューが表示され、左から消滅するようにします(ユーザーに有用な情報があるかどうかによって異なります)。ViewControllerナビゲーション後にアニメーション位置が失われます

私は制約を使用して配置することを見たいので、ストーリーボードから作成する必要があります。

このコードスニペットでは、コードを表示するときにビューを移動する必要があります。 しかし、次のVCに進むと、ビューが元の位置に再び現れ、VCから最初のVCに戻るときに、実際に元の位置に戻っていることがわかります。

ビューの「状態」を変数に保存して、VCのさまざまなライフサイクルで表示/非表示にしていましたが、本当に役に立たなかったものです。

これを達成する最良の方法はなんですか?

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var myView: UIView! 
    var boxIsVisible = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    var originalX:CGFloat = 0.0 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     originalX = self.myView.frame.origin.x 
     if boxIsVisible == false { 
      self.myView.center.x -= 200 
     } 
    } 


    @IBAction func slideInAction(sender: AnyObject) { 
     UIView.animateWithDuration(3.0, animations: { 
      self.myView.center.x = self.originalX 
       self.boxIsVisible = true 

     }) 
} 

    @IBAction func slideOutAction(sender: AnyObject) { 
     UIView.animateWithDuration(3.0, animations: { 
      self.myView.center.x = -200 
       self.boxIsVisible = false 
     }) 
    } 
} 
+0

プロジェクトはここからダウンロードできます:https://github.com/drollig8/UIViewAnimation –

答えて

1

自動レイアウトを使用するため、ビューの位置ではなく先頭の制約を更新します。

class ViewController: UIViewController { 
    @IBOutlet weak var myView: UIView! 
    var boxIsVisible = false 
    @IBOutlet weak var leadingConstraint: NSLayoutConstraint! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     if boxIsVisible == false { 
      leadingConstraint.constant = -myView.frame.width 
     } 
    } 

    @IBAction func slideInAction(sender: AnyObject) { 
     UIView.animateWithDuration(3.0, animations: { 
      self.leadingConstraint.constant = -50 
      self.view.layoutIfNeeded() 
      self.boxIsVisible = true 
     }) 
    } 

    @IBAction func slideOutAction(sender: AnyObject) { 
     UIView.animateWithDuration(3.0, animations: { 
      self.leadingConstraint.constant = -self.myView.frame.width 
      self.view.layoutIfNeeded() 
      self.boxIsVisible = false 
     }) 
    } 
} 
関連する問題