2015-02-10 69 views
0

目前我這樣做是爲了給Countdown設置動畫。有沒有更多的聰明的方式來做到這一點? 使用協議通知委託人動畫已完成是否聰明?FadeIn FadeOut動畫級聯 - 有更好的方法嗎?

您可以下載我目前工作的代碼:

https://github.com/madeTK/TKAnimations.git

感謝您的任何意見。

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.threeTwoOneCounter() 
} 

func threeTwoOneCounter() { 
    let fadeInTime:Double = 1.0 
    let fadeOutTime:Double = 0.5 
    let label = UILabel(frame: CGRectMake(self.view.bounds.width/2-50,100,100,100)) 
    label.text = "3" 
    label.font = UIFont(name: "Arial", size: 50) 
    label.textColor = UIColor.blackColor() 
    label.textAlignment=NSTextAlignment.Center 
    label.alpha = 0.0 
    self.view.addSubview(label) 

    UIView.animateWithDuration(fadeInTime, animations: {() -> Void in 
     label.alpha = 1.0 
    }) { (Bool) -> Void in 

     UIView.animateWithDuration(fadeOutTime, animations: {() -> Void in 
      label.alpha = 0.0 
     }, completion: { (Bool) -> Void in 
      label.text = "2" 
      UIView.animateWithDuration(fadeInTime, animations: {() -> Void in 
       label.alpha = 1.0 
      }, completion: { (Bool) -> Void in 
       UIView.animateWithDuration(fadeOutTime, animations: {() -> Void in 
        label.alpha = 0.0 
       }, completion: { (Bool) -> Void in 
        label.text = "1" 
        UIView.animateWithDuration(fadeInTime, animations: {() -> Void in 
         label.alpha=1.0 
        }, completion: { (BOOl) -> Void in 
         UIView.animateWithDuration(fadeOutTime, animations: {() -> Void in 
          label.alpha = 0.0 
         }, completion: { (Bool) -> Void in 
          println("done.maybe calling delegate now") 
         }) 
        }) 
       }) 
      }) 

     }) 
    } 

回答

1

您可以像這樣重構代碼。

func threeTwoOneCounter() { 

    let label = UILabel(frame: CGRectMake(self.view.bounds.width/2-50,100,100,100)) 
    label.text = "3" 
    label.font = UIFont(name: "Arial", size: 50) 
    label.textColor = UIColor.blackColor() 
    label.textAlignment=NSTextAlignment.Center 
    label.alpha = 0.0 
    self.view.addSubview(label) 

    animateCountdownLabel(label, startValue: 3) {() ->() in 
     println("done.maybe calling delegate now") 
    } 
} 

func animateCountdownLabel(label : UILabel,startValue : Int,completed :() ->()) 
{ 
    if (startValue <= 0) 
    { 
     completed() 
     return 
    } 
    let fadeInTime:Double = 1.0 
    let fadeOutTime:Double = 0.5 
    label.text = "\(startValue)" 

    UIView.animateWithDuration(fadeInTime, animations: {() -> Void in 
     label.alpha = 1.0 
     }) { (Bool) -> Void in 

      UIView.animateWithDuration(fadeOutTime, animations: {() -> Void in 
       label.alpha = 0.0 
       }, completion: { (Bool) -> Void in 

        self.animateCountdownLabel(label, startValue: startValue - 1,completed: completed) 

      }) 
    } 
} 

animateCountdownLabel()功能,直到倒數變成0被遞歸調用。