यह बिल्कुल नहीं है कि UIKit एनिमेशन कैसे काम करते हैं। मैं इन सबसे-का वर्णन करती हैं कि यह के आधे this answer में काम करता है, लेकिन मैं प्रासंगिक बिट संक्षेप में प्रस्तुत करने की कोशिश करेंगे:
- सब कुछ एक बनावट आयत है। (कुछ अपवाद हैं, जैसे कि कैशपलेयर, लेकिन यह अधिकांश भाग के लिए सच है।)
UIView
की गुण कैलियर के "मॉडल पेड़" गुणों से जुड़ी हैं। वे तत्काल बदलते हैं।
- एनिमेशन प्रारंभिक मान से वर्तमान मॉडल मान तक "प्रस्तुति वृक्ष" गुणों को एनिमेट करके काम करते हैं।
- एनीमेशन का प्रारंभिक मूल्य, डिफ़ॉल्ट रूप से, पिछले मॉडल मान है।
UIViewAnimationOptionBeginFromCurrentState
निर्दिष्ट करना यह वर्तमान प्रस्तुति मान का उपयोग करता है।
रहे हैं, ज़ाहिर है, कुछ अपवादों को छोड़कर (CAShapeLayer
एक बनावट रेक्ट की तुलना में अधिक हो सकता है, लगता है UIScrollView
एक टाइमर पर एनिमेशन स्क्रॉल करता है, UIView संक्रमण पूरी तरह से एक और बात कर रहे हैं ...)।
कैसे रोटेशन चाहिए है काम करने के लिए है कि आप प्राप्त एक भी -setFrame:
, सब कुछ खर्च की गई थी (और संभवत: rerendered), और फिर animatable गुण एनिमेटेड रहे हैं। डिफ़ॉल्ट रूप से, इसका मतलब है कि चीजें नए आयामों को फिर से प्रस्तुत की जाएंगी लेकिन पुराने आयामों को फिट करने के लिए फैली हुई हैं, और फिर घूर्णन प्रगति के रूप में एनिमेट (और अनस्ट्रेच) करें।
ने कहा, GLKView
अलग-अलग काम कर सकता है।यदि आप GLKViewController
का उपयोग कर रहे हैं, तो यह रोटेशन एनीमेशन के दौरान प्रतिपादन को निलंबित भी कर सकता है। आप रोटेशन के दौरान -setNeedsDisplay
पर कॉल करने का प्रयास कर सकते हैं, लेकिन फ्रेम बहुत पहले से ही इसके अंतिम मूल्य पर सेट होने के बाद से बहुत मदद नहीं करेगा।
शायद रोटेशन एनीमेशन को संभालने का सबसे आसान तरीका घुमावदार फ्रेम में एक गैर-एनिमेटेड रिलाउट को मजबूर करना है और फिर रेंडरर में कुछ झुकाव करना (काला सीमा और स्टेटस बार अलग से एनिमेट करना)।
वैकल्पिक रूप से, पारंपरिक तरीका अपने वीसी पोर्ट्रेट को केवल बनाने और डिवाइस अभिविन्यास अधिसूचनाओं को स्वयं संभालने का है, लेकिन यह कीड़े का एक बड़ा हिस्सा है (फिर आपको स्टेटस बार अभिविन्यास के बारे में चिंता करने की ज़रूरत है जो स्पर्श की तरह चीजों को निर्धारित करता है ऑफसेट और कीबोर्ड अभिविन्यास, और यह अन्य वीसी से/में संक्रमण करते समय "दिलचस्प" पर बातचीत करता है)।
स्रोत
2013-04-06 02:50:13
क्या आप शेडर्स या GLKBaseEffect का उपयोग कर रहे हैं? –
दोनों ने कोशिश की: 'GLKBaseEffect' और मेरे अपने शेडर्स - एक ही परिणाम। '-drawRect: 'एनीमेशन समाप्त होने के बाद कहा जाएगा - इसलिए किसी भी जीएल प्रतिपादन (जिसे हम आम तौर पर वहां रखते हैं) उस पल में निलंबित कर दिया जाएगा। – kpower
ठीक है। मैं सोच रहा था कि शायद GLKBaseEffect पर प्रक्षेपण मैट्रिक्स प्रॉपर्टी छोटी थी। मुझे लगता है कि ... –