2010-07-31 10 views
8

टेक्स्ट के भाग दिखाते हुए एक एप्लिकेशन में, जब डिवाइस को लैंडस्केप ओरिएंटेशन में बदल दिया जाता है तो मेरे पास फ़ॉन्ट आकार बढ़ता जा रहा है। मुझे यह पसंद नहीं है कि यह पूरी एनीमेशन कैसे करता है और फिर अचानक नए आकार में कूदता है, इसलिए मैं रोटेशन के दौरान आकार परिवर्तन को एनिमेट करना चाहता हूं।आईओएस - UILabel या UITextView में पाठ आकार परिवर्तन को एनिमेट करना?

मैंने कहीं पढ़ा है कि एक UIView एनीमेशन ब्लॉक में इस परिवर्तन फेंक क्योंकि फ़ॉन्ट संपत्ति नहीं animatable, तो ऐसा करने के लिए मेरे पास क्या विकल्प हैं काम नहीं करता है?

मेरी विशिष्ट कार्यान्वयन मैं बस UILabel/ UITextView नहीं स्केलिंग कर रहा हूँ के रूप में है के लिए

; बॉक्स की सीमाएं फ़ॉन्ट आकार से अधिक (आनुपातिक रूप से) बढ़ रही हैं, इसलिए टेक्स्ट में फिर से प्रवाह होगा। मेरी तरफ से ठीक है।

संपादित करें: मैं UITextView को स्केल करने के साथ ठीक होगा।

इसके अलावा, मैं इसे मैन्युअल रूप से "एनिमेटिंग" पर विचार कर रहा था: मेरे पास एक तरीका है जो मेरे विचार बताता है और फ़ॉन्ट आकार के लिए समायोजित करता है। अगर मुझे पता था कि घूर्णन शुरू होने वाला था, और एनीमेशन की अवधि, तो मैं इसे समय दे सकता था ताकि यह एनीमेशन के बीच में एक मध्यवर्ती फ़ॉन्ट आकार या दो प्रस्तुत करता हो। उनको प्राप्त करने में कोई मदद की सराहना की जाएगी।

+1

क्या आप वह हासिल करने में कामयाब रहे हैं जो आप करना चाहते थे? क्या आप प्रश्न को बंद करने के उत्तर में से एक को स्वीकार कर सकते हैं? – MiKL

उत्तर

6

तो मुझे पता था कि जब रोटेशन के बारे में शुरू करने के लिए गया था, और एनीमेशन की अवधि ...

मजेदार आपको इसका जिक्र करना चाहिए। एनीमेशन शुरू होने से ठीक पहले, आपके व्यू कंट्रोलर को willAnimateRotationToInterfaceOrientation:duration: संदेश प्राप्त होगा जो आपको आवश्यक सटीक जानकारी देता है।

1

didAnimateFirstHalfOfRotationToInterfaceOrientation: कहा जाता है जब फ़ॉन्ट आकार बदलें। इस तरह उपयोगकर्ता रोटेशन पूरा होने के बाद परिवर्तन को नहीं देख पाएगा। घूर्णन हो रहा है, तो फ़ॉन्ट आकार परिवर्तन को देखना मुश्किल होगा!

+0

जब तक आप दो-चरण एनीमेशन सक्षम नहीं करते हैं, तब तक उस विधि को तब तक नहीं बुलाया जाता है, जिसके लिए अतिरिक्त मैन्युअल सामग्री की आवश्यकता होती है जिसे मैं वास्तव में प्राप्त करना चाहता हूं। लेकिन किसी भी तरह अच्छा विचार! – kbanman

6

एक विकल्प, पुराने पाठ बाहर फीका फ़ॉन्ट आकार बदलने के लिए, और फिर से नहीं हो पाती है। फॉन्ट संपत्ति animatable नहीं हो सकता है, लेकिन अल्फा है। चूंकि अल्फा यूआईवीव की एक संपत्ति है, इसलिए आप अपने सभी टेक्स्ट-असर वाले विचारों को उसी तरह से देख सकते हैं: UILabel, UITextView, आदि यह भी अच्छा दिखता है।

+0

मुझे यह विधि पसंद है। – Moshe

4

एक तरह से आगे बढ़ने के लिए हो सकता है:

  1. एक CAKeyframeAnimation
  2. स्केलिंग और रोटेशन आप वस्तुओं CATransform3D का एक सेट
  3. करने के लिए इन रूपांतरण जोड़े का उपयोग कर कि एनीमेशन के दौरान हासिल करना चाहते हैं परिभाषित करें अपना keyframed एनीमेशन
  4. अपने लेबल परत वस्तु को addAnimation संदेश भेजें: [[label layer] addAnimation];

यहाँ yourLabel संभालने एक कोड नमूना होगा UILabel आप पैमाने पर करना चाहते हैं और बारी बारी से:

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y 
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font 

[scale setValues:[NSArray arrayWithObjects: 
[NSValue valueWithCATransform3D:CATransform3DIdentity], 
[NSValue valueWithCATransform3D:rotationScaled], 
nil]]; 

// set the duration 
[scale setDuration: 1.0]; 

// animate your label layer 
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"]; 

यह आमतौर पर कैसे एक पाठ के चारों ओर उछल उदाहरण के लिए एनिमेटेड किया जाएगा है।

आप इस शुरू जब डिवाइस घूर्णन शुरू होता है और एनीमेशन को पुनः प्राप्त जब यह तो आप उचित पैमाने/स्थिति के साथ अपने लेबल अद्यतन कर सकते हैं घूर्णन किया है हो सकता है।

आप उचित समय और रोटेशन को खोजने के लिए ट्यूनिंग की आवश्यकता होगी।

+0

@ केल्सो। क्या आपने इसे एक विचार/कोशिश दी है? – MiKL

+0

समय दाएं और दाएं रोटेशन प्राप्त करने के लिए आप ऊपर वर्णित विधि का उपयोग कर सकते हैं: 'willAnimateRotationToInterfaceOrientation: अवधि: ' – MiKL

+0

@ kelso.b। क्या आपने कभी ऐसा करने में कामयाब रहा जो आप प्राप्त करना चाहते थे? उत्तर में से किसी एक को स्वीकार करने के बारे में कैसे आपका प्रश्न बंद हो सकता है? चीयर्स। Mikl – MiKL