2011-01-18 12 views
8

"भीतर" वहाँ drawRect चेतन पिछले दृश्य अगले एक करने के लिए से बनाने के लिए एक तरीका है?मैं चेतन करना चाहते हैं, इस तथ्य फीका में, drawRect

(आश्चर्यजनक) आप drawRect अंदर चेतन सकते हैं - यह प्रयास करें। आप किसी भी अन्य संपत्ति को फीका, अनुवाद या एनिमेट कर सकते हैं।

हालांकि, यह रिक्त से "ताजा से" शुरू होता है। तो उदाहरण के लिए यदि आप drawRect में एक फीड-इन एनीमेशन ब्लॉक डालते हैं, तो गायब होने वाला पिछला दृश्य और नया दृश्य सफेद से फीका होगा।

मैं स्क्रीन पिछले छवि (drawRect के पिछले चक्र में तैयार) नई छवि मैं सिर्फ तैयार की है करने के लिए से फीका करने के लिए चाहते हैं ... अरे, ड्राइंग कर रहा हूँ।

क्या ऐसा करने का कोई तरीका है, संभवत: drawRect के साथ क्या हो रहा है? एक दृश्य से दूसरे के सम्मिश्रण -

यह एक बहुत ही आम उपयोग होने के लिए प्रतीत होता है।

क्या कोई भी रहस्य को जानता है?

बेशक, यह स्पष्ट रूप से कोर एनीमेशन मिलिओ या कई अन्य तरीकों से किया जा सकता है, लेकिन एक drawRect से अगले में drawRect फीका होना एक स्पष्ट विचार है। चीयर्स। WrightCS की प्रतिभा को

एस्टाउन्डिंग अद्यतन धन्यवाद .....

केवल WrightCS के लिए धन्यवाद, अब हम जानते हैं कि drawRect पूरी तरह से एनिमेशन संभालती है। बस किसी भी drawRect के अंत में इस कोड को पेस्ट और यह प्रयास करें:

self.alpha = 0.0; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:2]; 
self.alpha = 1.0; 
[UIView commitAnimations]; 

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

हाथ में समस्या - रिक्त स्थान से शुरू होने के बजाय पिछले दृश्य से एनीमेशन कैसे शुरू करें?

उत्तर

4

थोड़ा देर हो चुकी है, लेकिन मैं इसके लिए भी खोज कर रहा था, और this question के स्वीकृत उत्तर drawRect के अंदर से एक आकर्षण की तरह काम कर रहा है।

+1

धन्यवाद! देर से काम करने वालों के लिए देर नहीं हुई :) – trillions

2

आप अल्फा चेतन कर सकते हैं:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:2.0]; 
myObject.alpha = 0.0; 
[UIView commitAnimations]; 
+0

@ जो ने कभी कोशिश नहीं की, लेकिन मुझे नहीं पता कि क्यों नहीं। – WrightsCS

+5

नहीं, आपको अंदर से drawRect से ऐसा करने की अनुमति नहीं है :! इसे किसी अन्य स्थान पर करें और अपने drawRect के अंदर एनिमेट करने के बारे में परेशान न करें: –

4

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

एनिमेशन के लिए समय की आवश्यकता होती है और उपयोगकर्ता को अलग-अलग फ्रेम दिखाते हैं।

आप अपने आप सब कुछ कर सकते हैं (लगातार एक लालसा को मजबूर कर रहे हैं और प्रत्येक बार आकर्षित करने में थोड़ा अलग कर रहे हैं) लेकिन यह बहुत काम है, विशेष रूप से यदि आप इसे सही करना चाहते हैं तो विशेष रूप से।

सौभाग्य से आईओएस के लिए आपके लिए प्रोग्राम किए गए कई एनीमेशन प्रभाव हैं। या तो कोर एनीमेशन का उपयोग कर, या UIKit में (अधिक सरल और मूल) एनीमेशन। लेकिन चूंकि यह विचारों के कुछ गुणों को एनिमेट करके काम करता है (उदाहरण के लिए पूरे दृश्य का अल्फा, या पूरे दृश्य का घूर्णन, ...) आपको इसका अच्छा उपयोग करने के लिए अपने विचारों और सबव्यूव को पुनर्व्यवस्थित करने की आवश्यकता हो सकती है।

उदा। प्रत्येक घोड़ा अंग अलग-अलग सबव्यूव है और आप उनके परिवर्तनों को एनिमेट करते हैं (कोई रेड्रा आवश्यक नहीं है, आईओएस बाकी करेगा)

उदा। पुराने और नए फ्रेम दो अलग-अलग विचार हैं और आप अल्फा 1.

+1

मैं यह नहीं कह रहा हूं कि कोड असफल हो जाएगा, लेकिन यह कभी भी पिछले कीफ्रेम से वर्तमान में फ़ेडिंग नहीं करेगा। –

+0

एनीमेशन के साथ काम करना पहले थोड़ा मुश्किल है, जब तक कि आपको एहसास न हो कि सभी एनिमेटेबल गुण दो बार संग्रहीत किए जाते हैं: कोड में आप जिस तक पहुंचते हैं वह 'लक्ष्य' होता है, जबकि कोरियनाइज़ेशन वास्तव में स्क्रीन पर दिखाए गए 'आधा रास्ते' मानों की गणना करता है। CommitAnimimations तुरंत नियंत्रण लौटाता है, वास्तविक एनीमेशन बाद में खुश होगा, इसके बिना आपको अब इसकी देखभाल करने की ज़रूरत नहीं है। यही है कि आप इसे सही से कॉल कर सकते हैं (मैं अपने उत्तर के कोडिंग को अनुकूलित कर दूंगा) –

+0

चलो देखते हैं। लेकिन मुझे शक है। –

1

को अल्फा 0 से नया फ्रेम (जो शीर्ष पर है) चेतन यदि आप आईओएस के तहत कर रहे 5.0+, आप निम्न का उपयोग कर सकते हैं:

... 
      [UIView animateWithDuration:0.3 
            delay:0.0 
           options:UIViewAnimationOptionBeginFromCurrentState 
          animations:^{ 
           //do your stuff here 
          }completion:^(BOOL finished) { 
           //completition stuff go here 
          }]; 
... 
0

सबसे अच्छी बात यह है कि आप दो UIView उदाहरणों और उनके बीच एनिमेट का उपयोग कर सकते हैं।

जब आप एनीमेशन शुरू कर रहे हैं तो आपको यह जानना होगा कि एनीमेशन की मूल और अंतिम स्थिति कौन सा है। यह मुश्किल है अगर यह केवल एक दृश्य है।

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