2011-12-31 10 views
52

मैं DOC में जाना जाता है और यह कहा:वास्तव में क्या bool पैरामीटर करता animateWithDuration कर

पूरा होने
... इस ब्लॉक का कोई वापसी मान है और यह एक बूलियन लेता है तर्क जो इंगित करता है कि समापन हैंडलर कहलाए जाने से पहले एनिमेशन वास्तव में समाप्त हो गया था या नहीं। ...

लेकिन मुझे लगता है कि कोई बात नहीं आप bool पैरामीटर या नहीं का उपयोग करें, completion: ब्लॉक हमेशा animations: ब्लॉक के बाद निष्पादित करेंगे। नीचे दिखाए गए दो साधारण ब्लॉक-आधारित एनीमेशन कोड स्निपेट की तरह, दोनों ही वही कर रहे हैं।

[UIView animateWithDuration:0.3f 
        delay:0.0f 
       options:UIViewAnimationCurveEaseInOut 
      animations:^{ 
       [myView setAlpha:0.0f]; 
      } 
      completion:^(BOOL finished) { 
       [myView removeFromSuperview]; 
      }]; 

और

[UIView animateWithDuration:0.3f 
        delay:0.0f 
       options:UIViewAnimationCurveEaseInOut 
      animations:^{ 
       [myView setAlpha:0.0f]; 
      } 
      completion:^(BOOL finished) { 
       if (finished) [myView removeFromSuperview]; 
      }]; 

और मुझे लगता है कि (मुझे सहित) ज्यादातर लोगों पहले एक (यहां तक ​​कि सेब की आधिकारिक दस्तावेज़ उदाहरण) का उपयोग करें। तो,

  • finished पैरामीटर वास्तव में यहाँ क्या उपयोग किया जाता है?
  • या स्थिति क्या होगी?
+1

महान सवाल, मैंने कभी इस बारे में कभी सोचा नहीं जब तक कि मेरा कोड आज जब्त करने वाले एनिमेशन बना रहा हो। यह पूछने के लिए धन्यवाद! –

उत्तर

76

एनीमेशन रद्द होने पर समाप्त पैरामीटर नहीं होगा: आम तौर पर, जब आपने एनीमेशन को एक और शुरू करने के लिए बाधा डाली है (उदाहरण के लिए, आपने एक नया एनीमेशन शुरू कर दिया है, वर्तमान में समाप्त होने से पहले, पैरामीटर के साथ वर्तमान स्थिति से शुरू करें) या आपने सीधे एनीमेशन रद्द कर दिया है।

असल में यह वर्तमान एनीमेशन रद्द करता है, लेकिन समापन ब्लॉक अभी भी कहा जाता है। यदि आप एनिमेशन के अनुक्रम को चेन कर रहे थे तो आप उस श्रृंखला को रोकना चाहते हैं, इसलिए आप केवल पिछली एनीमेशन की श्रृंखला समाप्त कर देंगे।

उदाहरण के तौर पर, कल्पना करें कि आपके पास एक ऐसा गेम था जहां स्क्रीन पर एक बम उड़ रहा था। यदि उपयोगकर्ता बम टैप नहीं करता है, तो यह किनारे तक पहुंचने पर विस्फोट करता है। तो आपके पास बम को स्थानांतरित करने के लिए एक एनीमेशन होगा, और आपके समापन ब्लॉक में विस्फोट दिखाने के लिए एक और एनीमेशन होगा, और शायद स्कोर या कुछ कम करने के लिए कुछ विधि को कॉल करें।

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

+1

आपके उत्तर के लिए धन्यवाद! "_y आपने एनीमेशन को एक और शुरू करने के लिए बाधित किया है", यह इस पैरामीटर का उपयोग करने की स्थिति हो सकती है! लेकिन क्या आप एक साधारण उदाहरण दे सकते हैं? : पी "_ अगर आप एनीमेशन का एक अनुक्रम प्राप्त कर रहे थे, तो आप उस श्रृंखला को रोकना चाहते हैं, इसलिए आप केवल पिछली एनीमेशन की श्रृंखला को समाप्त कर देंगे", लेकिन यह पिछले एक के समाप्त होने तक एनिमेशन की श्रृंखला जारी नहीं रखेगा 'समाप्त' पैरामीटर के बिना, या तो। मैंने अपने ऐप में एनिमेशन के अनुक्रम के लिए और बिना किसी गलत ऑर्डर त्रुटि के इस तरह से ('if' कथन के बिना) किया था। – Kjuly

+6

मैंने एक साधारण उदाहरण जोड़ा है। – jrturton

+0

एक दिलचस्प और स्पष्ट उदाहरण! धन्यवाद! – Kjuly