किसी कारण से, जब मैं टेक्स्ट कलर को चेतन करने की कोशिश करता हूं, तो यह काम नहीं करेगा। TextColor बस अचानक ए से बी में बदल जाता है क्या इसे लाल से काला करने की अनुमति देना संभव है?
किसी कारण से, जब मैं टेक्स्ट कलर को चेतन करने की कोशिश करता हूं, तो यह काम नहीं करेगा। TextColor बस अचानक ए से बी में बदल जाता है क्या इसे लाल से काला करने की अनुमति देना संभव है?
जवाबों:
यह उत्तर अप्रचलित है, और मूल प्रश्न के लिए एक अच्छा समाधान नहीं है। नीचे दिए गए @strange का उत्तर बहुत बेहतर है और इस उत्तर के बजाय इसका उपयोग किया जाना चाहिए: https://stackoverflow.com/a/20892927276559
// नीचे पुराना उत्तर
textColorसंपत्ति, डॉक्स में animatable होने के रूप में निर्दिष्ट नहीं है तो मुझे नहीं लगता कि आप एक सरल UIView एनिमेशन ब्लॉक के साथ यह कर सकते हैं कि ...
यह शायद बहुत गंभीर रूप से मिलिसेकंड के NSTimerहर जोड़े को फायरिंग के साथ किया जा सकता है , हर बार धीरे-धीरे एक से दूसरे में रंग सेट करना।
मैं कहता हूं कि यह क्रूड है क्योंकि इसमें प्रीसेट कलर मानों से लेकर फिनिश कलर तक जाने के लिए एक सरणी या कुछ अन्य कंटेनर की आवश्यकता होगी, और मुझे यकीन है कि एक तरीका है जिससे आप कोर एनीमेशन या कुछ और का उपयोग कर सकते हैं, मैं सिर्फ डॉन 'पता नहीं यह क्या है।
CADisplayLinkबजाय उपयोग करना चाहिए NSTimerक्योंकि यह प्रदर्शन अपडेट के साथ सिंक्रनाइज़ है। WWDC 2014 सत्र 236 देखें : लगभग 13:00 बजे इंटरप्टिबल और रिस्पॉन्सिबल बिल्डिंग का निर्माण ।
इसके बजाय, क्या आपने इस तरह से ऑब्जेक्ट पर एक क्रॉसफेड संक्रमण का उपयोग करने की कोशिश की है, यह आपको एक रंग से दूसरे रंग में एक फीका-फीका-आउट प्रभाव देगा:
उद्देश्य सी
[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 पिछड़ रहे हैं (साथ ही बहुत अधिक कोड है)। ऊपर दिया गया ट्रांज़िशन एनीमेशन ट्रिक करता है, और चेन एनीमेशन में भी इस्तेमाल किया जा सकता है। मेरे पास एक ही मुद्दा था और पहले से ही ऊपर के समाधानों की कोशिश कर चुका हूं लेकिन यह सरल कोड इसके बजाय अद्भुत काम करता है।
UIView.transitionWithView(creditsLabel, duration: 0.3, options: .TransitionCrossDissolve, animations: { self.creditsLabel.textColor = UIColor.redColor() }, completion: nil)
स्विफ्ट 4 समाधान:
UIView.transition(with: yourLabel, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.yourLabel.textColor = .red
}, completion: nil)
UILabelलिए एक उदाहरण हो with। यदि आप कुछ ऐसा करते हैं transition(with: outerView.label…)और इसे अंदर स्थापित करने का प्रयास करते हैं, तो यह चुपचाप विफल हो जाएगा।
options: .easeInOut, इसलिए मैंने इसे बदल दिया .transitionCrossDissolve और काम किया।
कारण यह है कि TextColor एनिमेशन योग्य नहीं है, यह है कि UILabel एक CATextLayer के बजाय एक नियमित CALayer का उपयोग करता है।
TextColor को एनिमेटेबल (साथ ही टेक्स्ट, फॉन्ट आदि) बनाने के लिए, हम इसे एक CATextLayer का उपयोग करने के लिए UILabel को उपवर्गित कर सकते हैं।
यह काफी काम है, लेकिन सौभाग्य से मैंने पहले ही यह कर लिया है :-)
आप इस लेख में UILabel के लिए एक पूर्ण विवरण + एक ड्रॉप-इन ओपन सोर्स प्रतिस्थापन पा सकते हैं
आप UILabel का एक और उदाहरण बनाने की कोशिश कर सकते हैं या जो कुछ भी यह है कि इसमें TextColor है, और फिर उन दो उदाहरणों के बीच एनीमेशन लागू करें (पुराने textColor और नए textColor के साथ एक)।
यह केवल एक चीज थी जो मेरे लिए काम करती थी:
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()
यहाँ मेरा कोड पाठ रंग को चेतन करने के लिए है। महत्वपूर्ण हिस्सा clearColor को textcolor स्थापित करने के लिए है एनीमेशन से पहले
label.textColor = [UIColor clearColor];
[UIView transitionWithView:label duration:duration/4 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
label.textColor = self.highlightedCellPrimaryTextColor;
} completion:^(BOOL finished) { }];
@ स्ट्रेंज के उत्तर के लिए धन्यवाद , स्विफ्ट 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)
}