2015-10-17 25 views
6

Benim iOS uygulamasının arka plan rengini Bu defa ne varhızlı arka plan rengi animasyon döngü

saniye x miktar içinde dört renk arasında değiştirmek istiyorum (ben sadece 2 belirtirken istediğim tam olarak ne yapar renkler)

Ayrıca sonsuz döngü içinde çalışacak animasyona da ihtiyacım var.

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

Lütfen çözümümle deneyin. Animasyon tamamlama bloklarını kullanmak her zaman bir zamanlayıcı çalıştırmaktansa daha iyidir. – Abhinav

cevap

12

bu deneyin: durumunda

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

Eğer sürekli tekrarlanan animasyon istiyorum, bu deneyin: Kodun altında

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 bu harika! – user3390658

+0

İkinci çözümdeki tek sorun, ilk iki rengi atlaması, sadece gri ile kırmızı arasında geçiş yapmasıdır. – user3390658

+0

Geçiş, değişikliği gerçekten görmek için çok hızlıdır. Tamamlama bloğunu kullanabilir ve seçenek 2 ile devam etmek istiyorsanız, ihtiyacınıza uygun süre ile oynayabilirsiniz. – Abhinav

2

You have kullanmak NSTimer: zamanlayıcı geçersiz unutma bitirdiniz:

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 kodunuzu

PS her 5 saniyede çalışır Bununla. Bunun için timer.invalidate() numaralı telefonu arayın. Aksi halde bir kaza olur.

+0

Tamam, teşekkürler. Hızlıca yeniyim .. getNextColor işlevi nasıl görünür? – user3390658

+0

@ user3390658 güncellemeyi kontrol edin. ama bu en iyi çözüm değil :) – Arsen

3

animasyonlu görünümü ile kullanıcı etkileşimini sağlamak tutmaya yardımcı olur. Rastgele bir renk üretimi (gerekli olması halinde kullanılması).

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