2015-10-17 53 views
6

我希望我的iOS應用程序的背景色在x秒量四種顏色之間改變迅速的背景顏色動畫循​​環

這是我迄今(它不正是我想要什麼,當我只指定2顏色)

我還需要動畫無限循環運行。

ViewController.swift

UIView.animateWithDuration(X.0, animations: { 
     // Color 1 
     self.view.backgroundColor = UIColor(rgba) 
     // Color 2 
     self.view.backgroundColor = UIColor(rgba) 
     // Color 3 
     self.view.backgroundColor = UIColor(rgba) 
     // Color 4 
     self.view.backgroundColor = UIColor(rgba) 

    }) 
+0

請試試我的解決方案。使用動畫完成塊總是比運行定時器更好。 – Abhinav

回答

12

嘗試了這一點:

UIView.animateWithDuration(1.0, animations: {() -> Void in 
    self.view.backgroundColor = UIColor.blackColor() 
    }) { (Bool) -> Void in 
     UIView.animateWithDuration(1.0, animations: {() -> Void in 
      self.view.backgroundColor = UIColor.greenColor() 
      }, completion: { (Bool) -> Void in 
       UIView.animateWithDuration(1.0, animations: {() -> Void in 
        self.view.backgroundColor = UIColor.grayColor() 
        }, completion: { (Bool) -> Void in 
         UIView.animateWithDuration(1.0, animations: {() -> Void in 
          self.view.backgroundColor = UIColor.redColor() 
          }, completion:nil) 
       }) 
     }) 
} 

如果你想連續重複動畫,嘗試了這一點:

UIView.animateWithDuration(2, delay: 0.0, options:[UIViewAnimationOptions.Repeat, UIViewAnimationOptions.Autoreverse], animations: { 
    self.view.backgroundColor = UIColor.blackColor() 
    self.view.backgroundColor = UIColor.greenColor() 
    self.view.backgroundColor = UIColor.grayColor() 
    self.view.backgroundColor = UIColor.redColor() 
}, completion: nil) 
+0

woa真棒! – user3390658

+0

第二種解決方案唯一的問題是,它跳過前兩種顏色,它只是在灰色和紅色之間切換 – user3390658

+0

轉換太快而無法真正看到變化。你可以使用完成塊和持續時間玩,以適應你的需要,如果你想去選項2. – Abhinav

2

你必須使用NSTimer

let timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "update", userInfo: nil, repeats: true) 

func update() { 
    let nextCollor = getNextColor() 
    UIView.animateWithDuration(X.0, animations: { 
     self.view.backgroundColor = nextCollor 
    }) 
} 

func getNextColor() -> UIColor { 
    let currentColor = self.view.backgroundColor 

    if currentColor == smaple1 { 
     return UIColor.redColor() 
    } else if currentColor == smaple2 { 
     return UIColor.grayColor() 
    } else { 
     return UIColor.whiteColor() 
    } 
} 

NSTimer.scheduledTimerWithTimeInterval運行每5秒

PS代碼:別忘了無效計時器,當你完成用它。請致電timer.invalidate()。否則你會崩潰。

+0

好的,謝謝。我是swift新手.. getNextColor函數會是什麼樣子? – user3390658

+0

@ user3390658檢出更新。但它不是最好的解決方案:) – Arsen

3

下面的代碼有助於保持啓用與動畫視圖的用戶交互。隨機顏色生成(在需要的情況下使用)。

UIView.animateWithDuration(7, delay: 1, options: 
         [UIViewAnimationOptions.AllowUserInteraction, 
          UIViewAnimationOptions.Repeat, 
          UIViewAnimationOptions.Autoreverse], 
     animations: { 
      self.yourView.backgroundColor = self.randomColor() 
      self.yourView.backgroundColor = self.randomColor() 
     }, completion:nil) 

func randomColor() -> UIColor { 
     let randomRed:CGFloat = CGFloat(drand48()) 
     let randomGreen:CGFloat = CGFloat(drand48()) 
     let randomBlue:CGFloat = CGFloat(drand48()) 

     return UIColor(red: randomRed, green: randomGreen, blue: randomBlue, 
         alpha: 1.0) 
    }