मैं iOS में काफी अच्छी तरह से (QuadCurve) के CALayer
साथ CGPath
एनिमेशन कर रहा हूं । लेकिन मैं कुछ की तुलना में एक और अधिक दिलचस्प सहजता समारोह का उपयोग करना चाहते प्रदान की एप्पल (EaseIn / EaseOut आदि) द्वारा। उदाहरण के लिए, एक उछाल या लोचदार कार्य।
ये चीजें MediaTimingFunction (bezier) के साथ संभव हैं:
लेकिन मैं ऐसे टाइमिंग फ़ंक्शंस बनाना चाहूंगा जो अधिक जटिल हों। समस्या यह है कि मीडिया टाइमिंग के लिए एक क्यूबिक बेज़ियर की आवश्यकता होती है जो इन प्रभावों को बनाने के लिए पर्याप्त शक्तिशाली नहीं है:
(स्रोत: गौरैया- framework.org )
कोड अन्य चौखटे में सरल पर्याप्त से अधिक है, जो यह बहुत निराशा होती है बनाने के लिए। ध्यान दें कि घटता आउटपुट समय (Tt वक्र) के लिए इनपुट समय मैप कर रहा है और समय-स्थिति घटता नहीं। उदाहरण के लिए, easOutBounce (T) = t एक नया t देता है । फिर उस टी का उपयोग आंदोलन की साजिश करने के लिए किया जाता है (या जो भी संपत्ति हमें चेतन करनी चाहिए)।
इसलिए, मैं एक जटिल रिवाज बनाना चाहता हूं, CAMediaTimingFunction
लेकिन मुझे कोई सुराग नहीं है कि ऐसा कैसे करें, या यदि यह संभव है? क्या कोई विकल्प है?
संपादित करें:
यहाँ चरणों में एक ठोस उदाहरण दिया गया है। बहुत शैक्षिक :)
मैं बिंदु ए से बी तक एक रेखा के साथ एक वस्तु को चेतन करना चाहता हूं , लेकिन मैं चाहता हूं कि यह आसानी से ऊपर की ओर वक्र के उपयोग से लाइन के साथ अपने आंदोलन को "उछाल" करे। इसका मतलब है कि यह ए से बी तक की सटीक लाइन का पालन करेगा , लेकिन वर्तमान बेज़ियर-आधारित कैमीडियाटिमिंग फंक्शन का उपयोग करके जितना संभव हो उतना अधिक जटिल तरीके से तेजी और पतन होगा।
चलो उस लाइन को CGPath के साथ निर्दिष्ट किसी भी मनमानी वक्र गति को बनाते हैं। यह अभी भी उस वक्र के साथ आगे बढ़ना चाहिए, लेकिन इसे उसी तरह से तेज करना चाहिए और ठीक करना चाहिए जैसे लाइन उदाहरण में।
सिद्धांत रूप में मुझे लगता है कि इसे इस तरह काम करना चाहिए:
चलन वक्र को एक कीफ्रेम एनीमेशन चाल (t) = p के रूप में वर्णित करते हैं , जहाँ t समय [0..1] है, p की स्थिति समय t पर आंकी जाती है । तो चाल (0) वक्र की शुरुआत में स्थिति लौटाता है, सटीक मध्य स्थानांतरित (0.5) और अंत में (1) चलते हैं । समयावधि फ़ंक्शन समय (T) = t का उपयोग करके मूव के लिए t मान प्रदान करने के लिए मुझे वह देना चाहिए जो मुझे चाहिए। एक उछल प्रभाव के लिए, समय समारोह एक ही लौट जाना टी के लिए मूल्यों समय (0.8) और समय (0.8)(सिर्फ एक उदाहरण)। बस एक अलग प्रभाव प्राप्त करने के लिए समय समारोह को बदलें।
(हां, चार पंक्ति खंडों को बनाने और शामिल करने से लाइन-बाउंसिंग करना संभव है, जो आगे और पीछे जाता है, लेकिन यह आवश्यक नहीं होना चाहिए। आखिरकार, यह सिर्फ एक सरल रैखिक फ़ंक्शन है जो पदों के लिए समय मानों को मैप करता है ।)
मुझे आशा है कि मैं यहाँ समझ बना रहा हूँ।