2015-10-17 12 views
6

मुझे अपने iOS एप्लिकेशन की पृष्ठभूमि का रंग सेकंड के एक्स राशि से अधिक चार रंगों के बीच बदलने के लिएतेज पृष्ठभूमि रंग एनीमेशन पाश

यह वही है मैं अब तक किया है चाहते हैं (यह है मैं वास्तव में क्या चाहते हैं जब मैं सिर्फ 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

वोआ यह कमाल है! – 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 सेकंड

पुनश्च चलाता है इसके साथ। इसके लिए timer.invalidate() पर कॉल करें। अन्यथा आप एक दुर्घटनाग्रस्त हो जाते हैं।

+0

ठीक है धन्यवाद। मैं तेज़ी से नया हूं .. एक 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) 
    } 
संबंधित मुद्दे