2017-04-14 58 views
2

我有這段代碼應該給mainView的彈簧效果。查看動畫無效 - ios Swift 3

但是我沒有得到想要的效果,我只通過Storyboard獲得應用於ViewController的Transition樣式。

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) 
} 

你可以請求幫助獲得對mainView的彈簧效果嗎?

謝謝

+2

在'viewDidAppear'不'viewDidLoad'開始動畫。在'viewDidLoad'中,該視圖還不可見,並且不能生成動畫。 – Sulthan

+0

只需在你的'UIView.animate'區塊內調用'view.layoutIfNeeded()' –

+0

@Sulthan不錯!謝謝! –

回答

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) 
    } 
} 

例子:

enter image description here

+0

謝謝你解釋我! –

+0

我不認爲這是最好的解決方案。 'addSubview'代碼應該在'viewDidLoad'中,它不應該在'viewDidAppear'中,因爲這意味着它不會立即出現。 – Sulthan

+0

@Sulthan是不錯的UIKit公民,我甚至會添加super.viewDidAppear(動畫)。 Thx的建議。 –