查看动画不起作用 - ios Swift 3

Posted

技术标签:

【中文标题】查看动画不起作用 - ios Swift 3【英文标题】:View Animation does not work - ios Swift 3 【发布时间】:2017-04-14 08:22:01 【问题描述】:

我有这段代码应该给 mainView 一个弹簧效果。

但我没有得到想要的效果,我只是通过 Storyboards 将 Transition 样式应用于 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)
  

能否请您帮忙将弹簧效果添加到 mainView 中?

谢谢

【问题讨论】:

viewDidAppear 而不是viewDidLoad 中开始动画。在viewDidLoad 中,视图尚不可见且无法动画化。 只需在 UIView.animate 块内调用 view.layoutIfNeeded() @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)
    

动画示例:

【讨论】:

谢谢你解释我! 我认为这不是最好的解决方案。 addSubview 代码应该在 viewDidLoad 中,而不应该在 viewDidAppear 中,因为这意味着它不会立即出现。 @Sulthan 要成为优秀的 UIKit 公民,我什至添加了 super.viewDidAppear(动画)。谢谢你的建议。 我认为您的意思不是“生活圈”,对吗? ;) @Rikh 我的意思是视图控制器生命圈))但很好的捕捉

以上是关于查看动画不起作用 - ios Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

swift animateWithDuration 在 iOS 7 中不起作用

UIView transform.scaleBy 动画不起作用

swift - 从 var(UITextField 输入)中删除空格不起作用

Swift Uiview 背景动画不起作用

Swift - UIScrollView 滚动动画在 viewDidLoad() 中不起作用

使用swift 3更改iOS中的按钮标题不起作用