Search code examples
swiftios8animatewithdurationxcode6.0.1

UIView.animateWithDuration not animating


The UIView.animateWithDuration call in my ViewController viewDidLoad function does not animate. The completion block gets called immediately. The println output shows 'completion true'. Is the viewDidLoad function the wrong place to put my startup animation? Any hints are greatly appreciated.

class ViewController: UIViewController {
    @IBOutlet var beatIndicator:UIView?

    override func viewDidLoad() {
        super.viewDidLoad()

        if let led = beatIndicator? {
            led.alpha = 1.0
            led.frame = CGRectMake(20, 20, 30, 30)
            led.layer.cornerRadius = 15

            UIView.animateWithDuration(3.0, animations:{
                led.alpha = 0.5
                led.frame = CGRectMake(25, 25, 20, 20)
                led.layer.cornerRadius = 10
            }, completion:{(value: Bool) in
                println("completion \(value)")
            })
        }

        // ...
    }
}

Solution

  • Have you tried putting it in ViewDidAppear?

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if let led = beatIndicator {
            led.alpha = 1.0
            led.frame = CGRect(x: 20, y: 20, width: 30, height: 30)
            led.layer.cornerRadius = 15
    
            UIView.animate(withDuration: 3.0, animations:{
                led.alpha = 0.5
                led.frame = CGRect(x: 25, y: 25, width: 20, height: 20)
                led.layer.cornerRadius = 10
            }, completion:{(value: Bool) in
                print("completion \(value)")
            })
        }
    
        // ...
    }