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的建议。 –