2014-10-07 24 views
6

Bir animasyonun Swift'de başlayabilmesi için bir animasyonu bitirmesini bekleyebilir miyim? if animation.animationDidStop... {} ile uğraştım ama işe yaramıyor.Bir animasyonun Swift'de başlaması için nasıl bir animasyonun bitmesini bekleyebilirim?

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() 
} 
+0

bitmiş (: NSTimeInterval, animasyonlar animasyonlar: _ süresi() -> Void, tamamlama tamamlama:? ((Bool) -> Void))' ve tamamlandığında ikinci animasyonu çağırmak ? – Larme

+0

ve bunu kodumda nasıl uygularım? :) – user3157462

+0

Üzgünüm, yanlış okumuştum, animationImages kullanıyorsun. Swift'deki karşılığı kullanmanı öneririm: http://stackoverflow.com/questions/9283270/access-method-after-uiimageview-animation-finish – Larme

cevap

1

Erm, muhtemelen önce cevap ama Grand Central Sevk dispatc_aysnc kullanabilirsiniz:

İşte şimdiye kadar kodumu bazıları bu.

Fikir şu ki, animasyon süresini biliyorsunuz, böylece GDC'ye bir sonraki kodu ne zaman yürüteceğini söylemek için bunu kullanıyorsunuz. Yani böyle bir şey: Eğer kodumu bakın NSTimer yanı ...

kullanabilirsiniz birbiri ardına animasyon için

// 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); 

}); 
0

, bu ...

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. 
} 

} 

Açıklama yardımcı olabilir. ..

    İşte
  • startAnimation1() yöntem i startAnimation2() için NSTimer yöntemini arıyorum Sonra
  • viewDidLoad() içinde sesleniyor, İşte startAnimation2() yöntem 2 saniye ... yani sonra ilk sonra adlandırıldığını unutmayın animasyon `sınıf fonk animateWithDuration kullanarak ...

Teşekkür

İlgili konular