2011-11-07 16 views
13

ऐसा लगता है कि पहली बार जब मैं एनीमेशन चलाता हूं (UIView के फ्रेम को एनिमेट करता हूं, या कैलियर की स्थिति इत्यादि) यह काफी चंचल है, और बाद के एनिमेशन चिकनी हैं।आईओएस एनिमेशन पहली बार धीमे क्यों धीमे होते हैं?

इसका कारण क्या होगा, और क्या एनीमेशन को प्री-कैश करने का कोई तरीका है?

नोट: यह प्रश्न काफी समान है: UIImageView animations lag at first run, लेकिन मेरे एनिमेशन में UIImages का उपयोग नहीं किया जा रहा है।

+0

आप उल्लेख किया है कि इस (के [UIImageView एनिमेशन पहली बार चलाने पर अंतराल] डुप्लिकेट http://stackoverflow.com/questions/ है 3382478/UIImageView-एनिमेशन अंतराल-एट-फ़र्स्ट-रन)। – Moshe

+0

यह सच है, मैंने किया। मुझे लगता है कि यह जितना मैंने सोचा था उतना डुप्लिकेट नहीं है, क्योंकि मैं अपने एनिमेशन में यूआईएममेज से निपट नहीं रहा हूं। प्रश्न के उस हिस्से को संपादित किया। – ryleigh

+0

@ryleigh - पर्याप्त मेला। हालांकि यह एक अच्छा सवाल है, इसलिए एक उत्थान है। – Moshe

उत्तर

0

मान लें कि आप [UIImage imageNamed: @"herp.png"] का उपयोग कर रहे हैं छवि को कैश किया जाएगा। अगर छवि बहुत खींची जाती है तो इसे स्मृति में अनपॅक किया जाएगा, अन्यथा यह छवि का आलसी भार करेगा और एक स्टटर का कारण बन जाएगा।

+0

जिन एनिमेशनों से मैं चिंतित हूं वे UIImages का उपयोग नहीं कर रहे हैं, हालांकि यह जानना अच्छा है। विशिष्ट होने के लिए, एक मामले में मैं अपने माता-पिता से UITextView को हटा रहा हूं, इसे किसी अन्य दृश्य में जोड़ रहा हूं, और इसके फ्रेम को एनिमेट करने के लिए '[UIView एनिमेट ...]' का उपयोग कर रहा हूं। पहली बार यह स्टटर चलाता है, और इसके मूल दृश्य पर वापस आने के बाद और एनीमेशन फिर से ट्रिगर होता है, यह चिकनी है। – ryleigh

+0

इसमें किसी भी आइटम का प्रतिपादन शामिल है। यदि पाठ कभी संपादित नहीं किया जाता है तो इसे केवल एक बार प्रस्तुत किया जाना चाहिए। यह अभी भी आपकी समस्या का कारण बन सकता है। हालांकि, अपनी अन्य पोस्ट पढ़ने के बाद यह आपके कुंजीपटल पॉपिंग के साथ कुछ करने की संभावना है। – Nico

0

viewWillAppear के बजाय viewDidAppear में चलाएं। दिखाई देने के बाद कैशिंग होनी चाहिए, और यह उपयोगकर्ता के समान दिखना चाहिए।

+0

ठीक है, जिन एनिमेशन के साथ मैं काम कर रहा हूं वे उपयोगकर्ता इनपुट के जवाब में हैं, इसलिए दृश्य दिखाई देने पर मैं उन्हें सही नहीं खेल सकता। मैंने 'viewWillAppear' का उपयोग किया क्योंकि मैं उम्मीद कर रहा था कि उपयोगकर्ता उन्हें देख सकने से पहले उन्हें खेलने का कोई तरीका था (जो मूर्खतापूर्ण लगता है)। – ryleigh

+0

विषम। क्या आप [UIView startAnimations] विधियों या ब्लॉक-आधारित [UIView एनिमेट विथ अवधि: एनिमेशन: ...] विधियों का उपयोग कर रहे हैं? आप कौन से गुण एनिमेट कर रहे हैं? फ्रेम के अलावा कुछ भी? किस तरह की वस्तु? – Tim

+0

ठीक है एक मामले में मैं अपने माता-पिता से UITextView को हटा रहा हूं, इसे किसी अन्य दृश्य में जोड़ रहा हूं, और इसके फ्रेम को एनिमेट करने के लिए [UIView animateWithDurationsEtc ...] का उपयोग कर रहा हूं। हालांकि एक ही समय में एनीमेशन बजाता है, कीबोर्ड को बुलाया जाता है, इसलिए मुझे संदेह हो रहा है कि कुंजीपटल का निर्माण एनीमेशन को उस मामले में फटकारने का कारण बनता है। क्या यह समझ में आता है कि कीबोर्ड अब कहीं कैश किया गया है, ताकि अगली बार इसकी आवश्यकता होने पर इसे फिर से बनाया जा सके? यदि हां, तो क्या इसे पूर्व-प्रारंभ करने का कोई तरीका है? – ryleigh

2

यदि आपके पास TextField है, जो मुझे लगता है कि आपके उपयोगकर्ता इनपुट को प्राप्त होता है। UITextFieldDelegate तरीकों Did और नहीं Should

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
//Do textfield animations and other view animations here

} का प्रयोग करें

में आपके एनिमेशन मत करो;

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
//Don't do textfield animations and other view animations here
//This is where the system does its own animations; raising the keyboard, etc
}

+0

आपके सुझाव के लिए तकनीकी कारण क्या है? एनिमेशन "चिकनी" में आसानी से क्यों नहीं चलते हैं? –

संबंधित मुद्दे