2017-04-14 11 views
2

私はmainViewにスプリング効果を与えるはずのこのコードを持っています。アニメーションを表示できません - ios Swift 3

しかし、私は望ましい効果を得ることはありません、私はストーリーボード経由でのViewControllerに適用されるトランジションのスタイルを取得します。

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.statusBarHidden = UIApplication.shared.isStatusBarHidden 
    UIApplication.shared.setStatusBarHidden(true, with: .none) 


    self.mainView = UIView(frame: CGRect(x: self.view.getWidth/20, y:self.view.getHeight/6, width:self.view.getWidth/1.3 , height: self.view.getHeight/1.3)) 

    self.mainView.backgroundColor = UIColor.blue 
    self.mainView.center.x = self.view.center.x 
    self.mainView.center.y = self.view.center.y 

    self.mainView.transform = CGAffineTransform(scaleX: 0.8, y: 1.2) // initial view distorted scale so it has a starting point for the animation 

    self.view.addSubview(self.mainView) 

    UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: { 
     self.mainView.transform = .identity // get back to original scale in an animated way 
    }, completion: nil) 
} 

springViewをmainViewに登録する際に助けてください。

ありがとう

+2

スタートアニメーションを。 'viewDidLoad'では、ビューはまだ表示されておらず、アニメートできません。 – Sulthan

+0

'UIView.animate'ブロック内で' view.layoutIfNeeded() 'を呼び出すだけです。 –

+0

@Sulthan nice catch!ありがとう! –

答えて

1

アニメーションを操作するには、ビューコントローラのライフサークルを理解する必要があります。アニメーションを開始するタイミングと理由を理解しておく必要があるため、これは重要です。

まず、生命サークルについてはdocumentationでお読みください。

コードが、それは今働いている理由を理解しよう:アニメーションの

class ViewController: UIViewController { 

    var mainView = UIView() 

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

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     animateMainView() 
    } 

    func addMainView() { 
     self.mainView = UIView(frame: CGRect(x: self.view.frame.width/20, y:self.view.frame.height/6, width:self.view.frame.width/1.3 , height: self.view.frame.height/1.3)) 

     self.mainView.backgroundColor = UIColor.blue 
     self.mainView.center.x = self.view.center.x 
     self.mainView.center.y = self.view.center.y 

     self.view.addSubview(self.mainView) 
    } 

    func animateMainView() { 

     self.mainView.transform = CGAffineTransform(scaleX: 0.8, y: 1.2) // initial view distorted scale so it has a starting point for the animation 

     UIView.animate(withDuration: 0.9, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0, options: [], animations: { 
      self.mainView.transform = .identity // get back to original scale in an animated way 
     }, completion: nil) 
    } 
} 

例: `viewDidAppear`ない` viewDidLoad`で

enter image description here

+0

私に説明してくれてありがとう! –

+0

私はこれが最善の解決策だとは思わない。 'addSubview'コードは' viewDidLoad'になければなりません。 'viewDidAppear'にあるべきではありません。すぐには表示されないからです。 – Sulthan

+0

@Sulthan優れたUIKit市民には、super.viewDidAppear(animated)を追加することさえできます。提案のためのThx。 –

関連する問題