Ayush
Ayush

Reputation: 49

CAKeyFrameAnimation not working after presentViewController

My code was working fine and animating properly in root view controller. But when I moved it into another VC and navigated there using presentViewController, the images appeared statically and were not animating.

Root View Controller

       @IBAction func glassFillingButtonClicked(sender: UIButton) {
    let storyBoard = UIStoryboard(name: "Main", bundle:nil)

    let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("waterFilling") as! GlassFillingViewController
    self.presentViewController(nextViewController, animated:true, completion:nil)

waterFillingVC

    class GlassFillingViewController: UIViewController {
@IBOutlet weak var dropView: UIView!
@IBOutlet weak var dropImage: UIImageView!
@IBOutlet weak var dropImage2: UIImageView!
@IBOutlet weak var dropImage3: UIImageView!
@IBOutlet weak var dropImage4: UIImageView!
@IBOutlet weak var dropImage5: UIImageView!
@IBOutlet weak var dropImage6: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    dropAnimation()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func addWaterDroppingAnimation(beginTime: CFTimeInterval) -> CAKeyframeAnimation {
    let waterDroppingAnimation = CAKeyframeAnimation.init(keyPath: "opacity")
    waterDroppingAnimation.beginTime = beginTime
    waterDroppingAnimation.duration = 1.0
    waterDroppingAnimation.values = [0.2,1,0.2]
    waterDroppingAnimation.repeatCount = HUGE
    return waterDroppingAnimation
}

func dropAnimation() {
    dropImage.layer.addAnimation(addWaterDroppingAnimation(0.0), forKey: "basic")
    dropImage2.layer.addAnimation(addWaterDroppingAnimation(0.2), forKey: "basic")
    dropImage3.layer.addAnimation(addWaterDroppingAnimation(0.4), forKey: "basic")
    dropImage4.layer.addAnimation(addWaterDroppingAnimation(0.6), forKey: "basic")
    dropImage5.layer.addAnimation(addWaterDroppingAnimation(0.8), forKey: "basic")
    dropImage6.layer.addAnimation(addWaterDroppingAnimation(1.0), forKey: "basic")
}

}

Upvotes: 1

Views: 572

Answers (1)

Dare
Dare

Reputation: 2587

You shouldn't do your animation in viewDidLoad because it was just initialized and doesn't have a superview yet so the animation doesn't work. Try moving your code into viewDidAppear.

Upvotes: 3

Related Questions