कैसे एक UILabel की textColor संपत्ति चेतन करने के लिए?


82

किसी कारण से, जब मैं टेक्स्ट कलर को चेतन करने की कोशिश करता हूं, तो यह काम नहीं करेगा। TextColor बस अचानक ए से बी में बदल जाता है क्या इसे लाल से काला करने की अनुमति देना संभव है?

जवाबों:


6

यह उत्तर अप्रचलित है, और मूल प्रश्न के लिए एक अच्छा समाधान नहीं है। नीचे दिए गए @strange का उत्तर बहुत बेहतर है और इस उत्तर के बजाय इसका उपयोग किया जाना चाहिए: https://stackoverflow.com/a/20892927276559

// नीचे पुराना उत्तर

textColorसंपत्ति, डॉक्स में animatable होने के रूप में निर्दिष्ट नहीं है तो मुझे नहीं लगता कि आप एक सरल UIView एनिमेशन ब्लॉक के साथ यह कर सकते हैं कि ...

यह शायद बहुत गंभीर रूप से मिलिसेकंड के NSTimerहर जोड़े को फायरिंग के साथ किया जा सकता है , हर बार धीरे-धीरे एक से दूसरे में रंग सेट करना।

मैं कहता हूं कि यह क्रूड है क्योंकि इसमें प्रीसेट कलर मानों से लेकर फिनिश कलर तक जाने के लिए एक सरणी या कुछ अन्य कंटेनर की आवश्यकता होगी, और मुझे यकीन है कि एक तरीका है जिससे आप कोर एनीमेशन या कुछ और का उपयोग कर सकते हैं, मैं सिर्फ डॉन 'पता नहीं यह क्या है।


या: एक फ़ंक्शन जो आर और बी और एक प्रतिशत के बीच आरजीबी मूल्यों के साथ एक सरणी फेंकता है। हालांकि रंग एल्गोरिदम के बारे में कुछ भी पता नहीं है।
NOTWatchMyProfile

यहाँ अच्छे वर्कअराउंड हैं: यहाँ और यहाँ अन्ना कारेनिना की बदौलत
कटहल

4
आपको मैन्युअल रूप से ड्राइविंग एनिमेशन के CADisplayLinkबजाय उपयोग करना चाहिए NSTimerक्योंकि यह प्रदर्शन अपडेट के साथ सिंक्रनाइज़ है। WWDC 2014 सत्र 236 देखें : लगभग 13:00 बजे इंटरप्टिबल और रिस्पॉन्सिबल बिल्डिंग का निर्माण
डगलस हिल

यह किसी भी लंबे समय तक स्वीकार किए जाने वाले उत्तर नहीं होना चाहिए, भले ही यह उस समय सच था। नीचे अजीब जवाब देखें
bitwit

1
स्टैक ओवरफ्लो मुझे इस अप्रचलित उत्तर को हटाने की अनुमति नहीं देगा, क्योंकि इसे स्वीकार कर लिया गया है। चेकआउट @ अजीब जवाब नीचे।
जसारीन

196

इसके बजाय, क्या आपने इस तरह से ऑब्जेक्ट पर एक क्रॉसफेड ​​संक्रमण का उपयोग करने की कोशिश की है, यह आपको एक रंग से दूसरे रंग में एक फीका-फीका-आउट प्रभाव देगा:

उद्देश्य सी

[UIView transitionWithView:myLabel duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    myLabel.textColor = NEW_COLOR;
} completion:^(BOOL finished) {
}];

तीव्र

UIView.transitionWithView(creditsLabel, duration: 0.25, options: .TransitionCrossDissolve, animations: {     
    self.creditsLabel.textColor = UIColor.redColor() 
}, 
completion: nil)

यह विभिन्न कारणों से NSTimers, CATextLayers इत्यादि का उपयोग करने से बेहतर है। CATextLayer के पास टेक्स्ट कर्निंग या NSAttributedText के लिए उचित समर्थन नहीं है, और NSTimers पिछड़ रहे हैं (साथ ही बहुत अधिक कोड है)। ऊपर दिया गया ट्रांज़िशन एनीमेशन ट्रिक करता है, और चेन एनीमेशन में भी इस्तेमाल किया जा सकता है। मेरे पास एक ही मुद्दा था और पहले से ही ऊपर के समाधानों की कोशिश कर चुका हूं लेकिन यह सरल कोड इसके बजाय अद्भुत काम करता है।


7
अच्छा, सुरुचिपूर्ण, वास्तव में सबसे अच्छा और साफ समाधान।
मका

17
महान। स्विफ्ट में वही काम करता है:UIView.transitionWithView(creditsLabel, duration: 0.3, options: .TransitionCrossDissolve, animations: { self.creditsLabel.textColor = UIColor.redColor() }, completion: nil)
सिम्पलजी

8
बस एक नोट: यह केवल तभी काम करता है जब लेबल स्थिर हो। यदि आप ऐसा करते हैं और लेबल की स्थिति को संशोधित किया जा रहा है, तो फीका-आउट एनीमेशन बदसूरत विरूपण साक्ष्य दिखाएगा।
लुकास पेट्र

मेरे लिए Xcode 10.2.1 और स्विफ्ट 5 पर काम नहीं करता है। नीचे '' shokaveli 'विधि है
मार्टिन

मैं SwiftUI में ऐसा करने के लिए एक रास्ता तलाश रहा हूं, लेकिन यह उस समय समर्थित नहीं लगता है।
फिलिप सिप

58

स्विफ्ट 4 समाधान:

UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: {
  self.yourLabel.textColor = .red
}, completion: nil)

ध्यान दें, यह केवल तभी काम करता है जब आपके पास संपत्ति के UILabelलिए एक उदाहरण हो with। यदि आप कुछ ऐसा करते हैं transition(with: outerView.label…)और इसे अंदर स्थापित करने का प्रयास करते हैं, तो यह चुपचाप विफल हो जाएगा।
सैम सॉफिस

किसी कारण से मेरे लिए काम नहीं करता है। यह एनीमेशन के दौरान क्रमिक के बजाय अचानक परिवर्तन कर रहा है। :(
स्कॉट्टीब्लाड्स

1
@ ScottyBlades शायद आप बैकग्राउंड थ्रेड पर एनीमेशन कर रहे हैं? DispatchQueue.main.async {} कोष्ठक के अंदर UIView.transition कोड को लपेटने का प्रयास करें।
दोस्तो

1
FYI करें - पहली बार मैंने कोशिश की थी कि मैं काम नहीं कर रहा था और इसलिए कि मेरे पास था options: .easeInOut, इसलिए मैंने इसे बदल दिया .transitionCrossDissolve और काम किया।
सिंह 23

13

कारण यह है कि TextColor एनिमेशन योग्य नहीं है, यह है कि UILabel एक CATextLayer के बजाय एक नियमित CALayer का उपयोग करता है।

TextColor को एनिमेटेबल (साथ ही टेक्स्ट, फॉन्ट आदि) बनाने के लिए, हम इसे एक CATextLayer का उपयोग करने के लिए UILabel को उपवर्गित कर सकते हैं।

यह काफी काम है, लेकिन सौभाग्य से मैंने पहले ही यह कर लिया है :-)

आप इस लेख में UILabel के लिए एक पूर्ण विवरण + एक ड्रॉप-इन ओपन सोर्स प्रतिस्थापन पा सकते हैं


9

आप UILabel का एक और उदाहरण बनाने की कोशिश कर सकते हैं या जो कुछ भी यह है कि इसमें TextColor है, और फिर उन दो उदाहरणों के बीच एनीमेशन लागू करें (पुराने textColor और नए textColor के साथ एक)।


7

यह केवल एक चीज थी जो मेरे लिए काम करती थी:

let changeColor = CATransition()
changeColor.duration = 1

CATransaction.begin()

CATransaction.setCompletionBlock {
    selected.label.layer.addAnimation(changeColor, forKey: nil)
    selected.label.textColor = .blackColor()
}

selected.nameLabel.textColor = .redColor()

CATransaction.commit()

6

यहाँ मेरा कोड पाठ रंग को चेतन करने के लिए है। महत्वपूर्ण हिस्सा clearColor को textcolor स्थापित करने के लिए है एनीमेशन से पहले

label.textColor = [UIColor clearColor];
[UIView transitionWithView:label duration:duration/4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    label.textColor = self.highlightedCellPrimaryTextColor;
} completion:^(BOOL finished) { }];

0

मैंने पाया कि लेबल के नीचे एक UIView रखना बहुत आसान है और इसकी अस्पष्टता को दर्शाता है। लेबल को उस दृश्य में जोड़ना होगा। शायद संसाधनों की खपत के दृष्टिकोण से अच्छा समाधान नहीं है, लेकिन बहुत सीधा है।


0

अद्यतन स्विफ्ट 3.0

मैं अभी @budidino टिप्पणियों से बदला हूं

UIView.transition(with: my.label, duration: 0.3, options: .transitionCrossDissolve, animations: { my.label.textColor = .black }, completion: nil)

0

@ स्ट्रेंज के उत्तर के लिए धन्यवाद , स्विफ्ट 5 में पूरी तरह से काम करते हुए, एक्सकोड 11 थोड़ा सा वाक्यविन्यास परिवर्तन के साथ। मैं कई UILabels के लिए पाठ रंग को एनिमेट कर रहा था, यदि यह आपका मामला भी है, तो यह प्रयास करें

for label in [label1, label2, ...] as [UILabel] { // loop through a @IBOutlet UILabel array
        UIView.transition(with: label, duration: 0.3, options: .transitionCrossDissolve, animations: {
            label.textColor = .label
        }, completion: nil)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.