How to wait for the completion of one animation before the next launch in Swift?

How to wait until one animation ends before the next launch in Swift? I was messing with if animation.animationDidStop... {} , but that won't work.

Here are some of my codes:

 class ViewController: UIViewController { @IBOutlet weak var purpleRing: UIImageView! @IBOutlet weak var beforeCountdownAnimation: UIImageView! var imageArray = [UIImage]() var imageArray2 = [UIImage]() override func viewDidLoad() { super.viewDidLoad() for e in -17...0 { let imageName2 = "\(e)" imageArray2.append(UIImage(named: imageName2)!) } for t in 1...97 { let imageName = "\(t)" imageArray.append(UIImage(named: imageName)!) } } func startAnimation() -> Void { purpleRing.animationImages = imageArray purpleRing.animationDuration = 5.0 purpleRing.startAnimating() } func startAnimation2() -> Void { beforeCountdownAnimation.animationImages = imageArray2 beforeCountdownAnimation.animationDuration = 1.0 beforeCountdownAnimation.startAnimating() } @IBAction func startAnimations(sender: AnyObject) { startAnimation() startAnimation2() } 
+6
source share
2 answers

Erm probably answered earlier, but you can use the Grand Central Dispatc_aysnc dispatcher.

The idea is that you know the duration of the animation, so you use this to tell the GDC when the following code needs to be executed. So something like:

 // call animation 1, which you specified to have 5 second duration CGFloat animation1Duration = 5.0; CGFloat animation2Duration = 7.0; playAnimation1WithDuration(animation1Duration); // calling second animation block of code after 5.0 using GDC dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(animation1Duration * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { () -> Void in print("5.0 has passed"); // call second animation block here playAnimation2WithDuration(animation2Duration); }); 
+1
source

For one animation after another you can use NSTimer ...

See my code, this may help ...

 class ViewController: UIViewController { @IBOutlet weak var IBimg1: UIImageView! @IBOutlet weak var IBimg2: UIImageView! @IBOutlet weak var IBimg3: UIImageView! override func viewDidLoad() { super.viewDidLoad() startAnimation1() } func startAnimation1(){ NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("startAnimation2"), userInfo: self, repeats: false) UIView.animateWithDuration(2.0, animations: { self.IBimg1.alpha = 0 }) } func startAnimation2(){ NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("startAnimation3"), userInfo: self, repeats: false) UIView.animateWithDuration(2.0, animations: { self.IBimg2.alpha = 0 }) } func startAnimation3(){ UIView.animateWithDuration(2.0, animations: { self.IBimg3.alpha = 0 }) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

Explanation...

  • Here the startAnimation1 () method calls viewDidLoad ()
  • Then I call the NSTimer method for startAnimation2 () . Here, notice that the startAnimation2 () method is called after 2 seconds ..., i.e. After the first animation is finished ...

thanks

0
source

Source: https://habr.com/ru/post/976365/


All Articles