2009-11-13 16 views
8

मैं एक अजीब प्रारंभिक कूद रेड्रा के बिना, UILabel पर फ्रेम आकार परिवर्तन को आसानी से एनिमेट करने का एक सभ्य तरीका जानने का प्रयास कर रहा हूं। मैं लेबल के साथ एक चिकनी एनीमेशन प्राप्तUILabel के एनिमेटिंग फ़्रेम को आसानी से

// Assume myLabel frame starts as (0, 0, 100, 200) 
[UIView beginAnimations:@"myAnim" context:NULL]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
[UIView setAnimationDuration:1.0]; 
myLabel.frame = CGRectMake(0.0, 0.0, 50, 100); 
[UIView commitAnimations]; 

, तथापि जिस तरह से यह यह है कि यह गंतव्य आकार के लिए दोबारा बनाई छवि परत लेता है करता है कि: क्या डिफ़ॉल्ट रूप से होता है कि जब मैं इस तरह कुछ करना है लेबल और वर्तमान में फिट करने के लिए सामग्री को छिद्रित करता है फिर गंतव्य आयत पर एनिमेट करता है। यह टेक्स्ट डिस्प्ले में एक बहुत ही विचित्र कूद के साथ समाप्त होता है। यहाँ पूर्व एनीमेशन नज़र दिखा दो छवियों, और कर रहे हैं तो बस एनीमेशन प्रारंभ होने के बाद:

पूर्व एनीमेशन

के बाद एनीमेशन

मैं बस का उपयोग करने की कोशिश की है इसे एनिमेट करने के लिए परत, लेकिन मुझे अभी भी वही समस्याएं मिलती हैं।

तो सवाल यह है कि, मैं इससे कैसे बच सकता हूं?

किसी भी मदद के लिए धन्यवाद,
स्कॉट

+0

यह एक पुराने सवाल है, लेकिन मैं लड़ाई कर रहा हूँ बिल्कुल एक ही समस्या के साथ आईएनजी। किसी भी तरह यह अजीब है। जैसा कि मैं एनीमेशन विधियों को समझता हूं, आपको UIView क्लास पर अधिकांश गुणों को एनिमेट करने में सक्षम होना चाहिए। लेकिन सामान्य UIView उपclass से एनिमेट करते समय UILabel की फ्रेम प्रॉपर्टी अलग-अलग व्यवहार क्यों करती है। ऐसा लगता है कि UILabel क्लास आकार के लिए एनीमेशन को अनदेखा कर रहा है और केवल स्थान परिवर्तन को एनिमेट करता है। जो एक अजीब लग रही एनीमेशन बनाता है। अगर कोई मेरी मदद कर सकता है तो मैं सराहना करता हूं। – Chris

उत्तर

0

फ्रेम एनिमेट फ़ॉन्ट आकार बदल रहा है चेतन नहीं है। अगर मैं समझता हूं कि आप क्या व्यवहार कर रहे हैं, तो मुझे लगता है कि आपके पास लेबल का adjustsFontSizeToFitWidth 'ट्रू' पर सेट है, ताकि आप आकार के फ्रेम एनिमेट को फ़ॉन्ट आकार के तात्कालिक समायोजन के बाद देख सकें।

आप लेबल के ट्रांसफॉर्म को स्केल करने का प्रयास कर सकते हैं ताकि फ्रेम और फ़ॉन्ट स्केल एक साथ हो।

+0

असल में कोई मामला नहीं है। AdjustFontSizeToFitWidth यहां सेट नहीं है और मैं वास्तव में * नहीं * फ़ॉन्ट आकार बदलने की कोशिश कर रहा हूं, बस फ्रेम - जो पीले रंग में है। हालांकि क्या होता है कि नियत फ्रेम (इस मामले में) पाठ को "फिट" करता है, इसलिए यह पहली बार लाल परत को फिट करने के लिए फैलाता है, फिर इसे कम करता है। यही कारण है कि यह इस तरह अजीब लग रहा है। –

+0

तब सुनिश्चित नहीं है। यह एक दिलचस्प समस्या है। मैं देखूंगा कि मैं इसे बाद में पुन: पेश नहीं कर सकता हूं। मैं खुद उत्सुक हूँ। – TechZen

30

दो साल के मृत प्रश्न का उत्तर देने के लिए हुरेय, लेकिन मुझे जवाब मिला। या तो इंटरफ़ेस बिल्डर या कोड में, लेबल की contentMode संपत्ति बदलें। ऐसा लगता है कि scaleToFill पर सेट किया गया है; left या right आज़माएं।

+1

अगर मैं कर सकता, तो मैं 100 के साथ यह जवाब दूंगा! (यह अभी भी कभी-कभी कूदता है, लेकिन यह ठीक है) – Ariel

+0

यह मुझे काम नहीं करता !!! –

+0

टॉप लिफ्ट/दाएं या नीचे की ओर/सही सही सामग्री हो सकती है जिसे आप चाहते हैं कि सटीक एनीमेशन के आधार पर आप चाहते हैं। – CedricSoubrie

7

@ cliclcly के जवाब पर विस्तार करने के लिए: UILabel के प्रलेखन का अवलोकन से: UILabel वर्ग के

डिफ़ॉल्ट सामग्री मोड UIViewContentModeRedraw है। इस मोड में दृश्य को सामग्री को हर बार इसके बाध्य आयताकार परिवर्तनों को फिर से निकालने का कारण बनता है। आप कक्षा को विरासत में मिली सामग्री को संशोधित करके कक्षा में बदल सकते हैं।

UIView की contentMode संपत्ति के प्रलेखन से:

इस संपत्ति का डिफ़ॉल्ट मान UIViewContentModeScaleToFill है।

UILabels डिफ़ॉल्ट रूप से अन्य UIViews से अलग व्यवहार करते हैं क्योंकि उनकी सामग्री डिफ़ॉल्ट रूप डिफ़ॉल्ट रूप से भिन्न होती है।

-3

बस अपने लेबल के लिए ऑटो लेआउट बंद करें।

Xcode में, लेबल पर क्लिक करें और फिर में गुण फलक अन-चेक करें ऑटो लेआउट विकल्प

5

मैंने पाया कि UILabel फ्रेम एनिमेशन अजीब कर रहे हैं - उनके आकार अंत आकार और करने के लिए सेट कर दिया जाता immediatly टेक्स्ट उस आकार के लिए प्रस्तुत किया जाता है। उसके बाद केवल स्थिति परिवर्तन एनिमेटेड है, जिसका अर्थ है कि यदि गंतव्य का आकार (0,0) है तो लेबल तुरंत गायब हो जाता है। इस सीमा को रोकने के लिए मैंने लेबल को उसी आकार के दृश्य में रखा है जो उप-क्लिप क्लिप करता है, लेबल के लिए अक्षम ऑटोरेसाइजिंग करता है, और मैं लेबल के बजाय लेबल के पर्यवेक्षण को एनिमेट कर रहा हूं। अंत परिणाम यह है कि लेबल फ्रेम पूरी तरह से एनिमेटेड है लेकिन निहित पाठ को एक अलग फ़ॉन्ट आकार के साथ फिर से प्रस्तुत नहीं किया गया है, न ही टेक्स्ट कटाव परिवर्तन करता है। यह अभी भी सही नहीं है, लेकिन यह मेरे उद्देश्य के लिए उपयुक्त है।

प्रारंभिक फ्रेम:

initial frame

एनीमेशन के दौरान:

During animation

एनीमेशन समाप्त हो गया:

Animation ended

+0

मुझे विश्वास नहीं है कि मैं इसे UILabels के बारे में कभी नहीं जानता था। लेकिन आपने मुझे ऐसी समस्या का समाधान करने में मदद की जिसने मुझे पूरी तरह से स्टंप किया - धन्यवाद! – Echelon