2012-07-15 17 views
11

क्या UIButton की टेक्स्टकॉलर संपत्ति को एनिमेट करने का कोई तरीका है? मुझे UILabel टेक्स्ट रंग एनीमेशन के लिए कुछ समाधान मिल गए हैं, लेकिन UIButton के लिए कोई भी नहीं देखा है।एनिमेटिंग UIButton टेक्स्ट रंग

उत्तर

6

NSTimer एक एनीमेशन उपकरण के रूप में बिल्कुल अच्छा नहीं है, न ही यह सामान्य रूप में समयनिर्धारक जहां परिशुद्धता की जरूरत है (फ्रेम दर) के लिए इस्तेमाल किया जाना चाहिए यह blog post पूरी तरह से एक मिसाल है मेरी गैर-एनिमेटेबल UILabel गुणों के बारे में क्या करना है, इसे सीए के माध्यम से रेंडर सर्वर पर भेजा जाना चाहिए, न कि एनएसटीमर। UILabel के बजाय, आप CATextLayer का उपयोग या लपेट सकते हैं और मानक एनीमेशन ब्लॉक में foregroundColor संपत्ति को एनिमेट कर सकते हैं।

+0

लिंक टूटा हुआ है, यह एक उदाहरण के साथ अच्छा होगा ... – user1506145

+2

लिंक टूटा नहीं है ... – CodaFi

0

जाहिर है आप

[UIButton setTitleColor:[UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0] forState:UIControlStateNormal]; 

वास्तव में चेतन और समय के साथ रंग बदलने के लिए इसे प्राप्त करने के लिए के रूप में उपयोग करने के लिए की आवश्यकता होगी, तो आप NSTimer का एक उदाहरण बना सकते हैं और करने के लिए यह इंगित करने के लिए @selector परमाटर उपयोग करने की आवश्यकता होगी चलाने के लिए एक विशिष्ट विधि। प्रत्येक बार टाइमर चलता है, यह उस विधि को ट्रिगर करता है जो आपके UIButton के रंग को बदल देता है।

[NSTimer scheduledTimerWithTimeInterval:2.0f 
     target:self 
    selector:@selector(updateCounter:) 
    userInfo:nil 
    repeats:YES]; 

इसके अलावा बाहर की जाँच: http://servin.com/iphone/iPhone-Timers-and-Animated-Views.html

+0

सहमत हुए। लिंक – bkbeachlabs

+0

लिंक के लिए +1 ध्यान दें कि यह एक अच्छा ओएल सीए एनीमेशन के लिए कोई प्रतिस्थापन नहीं है। यूआईसीओलर ऑब्जेक्ट्स एनिमेटेड नहीं हो सकते हैं, लेकिन CGColor ऑब्जेक्ट्स बिल्कुल हैं। यदि आप UILabel को उपclass कर सकते हैं, तो आप अपने स्वयं के पाठ प्रतिपादन को लागू कर सकते हैं और अंतर्निहित सीए एनिमेशन का उपयोग कर सकते हैं। – CodaFi

-2

वास्तव में यह नहीं है एक एनीमेशन है, लेकिन यह काम करेगा।

किसी भी आवृत्ति के साथ टाइमर बनाएं जिसके साथ आप रंगों को एनिमेट करना चाहते हैं।

क्या टाइमर हर बार आग लगने पर एक विधि, changeColorOnButton कॉल करता है।

[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(changeColorOnButton:) userInfo:nil repeats:YES]; 

रंग की एक सरणी, colorsArray बनाएं (या तो समय से आगे रंग की व्यवस्था, या एक सरणी के लिए एक गुच्छा जोड़ने और उन्हें शफ़ल randomize करने के लिए। एक पूर्णांक बनाएँ, intForColorInArray

changeColorOnButton विधि में , की तरह कुछ कार्य करें:।

- (void) changeColorOnButton:(UIButton *) button { 

    UIColor *nextColor = [colorsArray objectAtIndex:intForColorArray]; 
    [button.titleLabel.setTextColor:nextColor]; 
    intForColorArray = (intForColorArray +1) % [colorsArray count]; 
} 
+0

@Stuartsoft से टाइमर विधि ले लिया। जो प्रशंसा का पात्र है, उसकी प्रशंसा करें। – bkbeachlabs

1

यह बहुत अच्छी तरह से here का उत्तर दिया गया है। यह मूल रूप से इस आसान आदमी का उपयोग करता है: [UIView संक्रमण WithView: अवधि: विकल्प: एनिमेशन: ^() पूर्णता: ^()]; दृश्य के साथ

13

उपयोग संक्रमण

[UIView transitionWithView:backButton 
          duration:0.5f 
          options:UIViewAnimationOptionTransitionCrossDissolve 
         animations:^{ 
          [backButton setTitleColor:[_peacock lighten:d.primary] forState:UIControlStateNormal]; 
         } 
         completion:^(BOOL finished){ 
         }]; 
+1

अच्छा काम करता है।साथ ही, आप मुख्य लक्ष्य के रूप में अभिभावक दृश्य का उपयोग कर सकते हैं, और फिर 'एनीमेशन' ब्लॉक में जिस तरह से चाहते हैं, उसके सभी बच्चे के विचारों को एनिमेट कर सकते हैं – Peterdk

0

आप अलग अलग रंग है जो एक ही स्थान पर रखा के साथ दो बटन (या लेबल, आदि) का उपयोग कर सकते हैं:

button1 = UIButton(frame: frame) 
button2 = UIButton(frame: frame) // same frame 

button1.setTitleColor(UIColor.redColor(), forState: .Normal) // red 
button2.setTitleColor(UIColor.blueColor(), forState: .Normal) // blue 

उसके बाद आप रंग की एनीमेशन तक पहुँच सकते हैं बटन 2 के संक्रमण एनीमेशन द्वारा:

UIView.animateKeyframesWithDuration(
    1.0, delay: 0, options: [.Autoreverse, .Repeat], 
    animations: { 
     UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: { 
      self.button2.alpha = 1.0 
     }) 

     UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: { 
      self.button2.alpha = 0.0 
     }) 
    }, completion: nil) 
संबंधित मुद्दे