2009-12-11 24 views
6

मैं कुछ साधारण एनीमेशन के साथ एक आईफोन ऐप पर काम कर रहा हूं।मैं पैराबॉलिक रूप से अनुवाद कैसे करूं?

मेरे पास एक दृश्य है जिसे मैं अनुवाद करना चाहता हूं, लेकिन एक लाइन के साथ नहीं। मैं इसे पैराबॉलिक रूप से अनुवाद करना चाहता हूं। कल्पना कीजिए कि मैं एक घुमावदार सड़क के साथ एक कार चल रहा हूँ एनिमेट कर रहा हूँ।

मैं जानता हूँ कि मैं CGAffineTransform का एक उदाहरण

समस्या है करने के लिए ठीक से बदलने सेट कर सकते हैं, मैं पता नहीं बदलना इसे बनाना सीखें। मुझे पता है कि कैसे स्केल करना, अनुवाद करना आदि। लेकिन मैं पैराबॉलिक रूप से अनुवाद कैसे करूं? क्या यह भी संभव है?

+0

बनाने के लिए एक समय समारोह में जोड़ सकते हैं बॉक्स के शीर्ष बाएं बिंदु के नए समन्वय को गणितीय रूप से और समन्वय का अनुवाद तदनुसार करें? –

+1

स्पेनिश में: पैराबॉलिकैंट;) – Escualo

+0

@ जेम्स - जहां तक ​​मैं कह सकता हूं कि केवल एक पंक्ति के साथ अनुवाद करना होगा, लेकिन मैं नहीं चाहता कि यह इस तरह के विकर्ण पर हो। मैं इसे वक्र पर रखना चाहता हूं। – bpapa

उत्तर

25

एक चिकनी वक्र के साथ एनिमेट करने के लिए, आप एक CAKeyframeAnimation का उपयोग करना चाहेंगे। this answer में मैं एक संयुक्त एनीमेशन के लिए कोड प्रदान करता हूं जो एक वक्र के साथ एक छवि दृश्य को स्थानांतरित करता है, जबकि इसका आकार बदलता है और इसे बाहर निकाल देता है।

// Set up path movement 
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
pathAnimation.calculationMode = kCAAnimationPaced; 
pathAnimation.fillMode = kCAFillModeForwards; 
pathAnimation.removedOnCompletion = NO; 

CGPoint endPoint = CGPointMake(480.0f - 30.0f, 40.0f); 
CGMutablePathRef curvedPath = CGPathCreateMutable(); 
CGPathMoveToPoint(curvedPath, NULL, viewOrigin.x, viewOrigin.y); 
CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, viewOrigin.y, endPoint.x, viewOrigin.y, endPoint.x, endPoint.y); 
pathAnimation.path = curvedPath; 
CGPathRelease(curvedPath); 

यह (दो नियंत्रण अंक, देखने के मूल में एक और प्रदर्शन के ऊपरी-दाएँ कोने में दूसरे के साथ एक वक्र बनाता लैंडस्केप मोड में: कि कोड के प्रासंगिक भाग इस प्रकार है)। पथ बनाने के लिए, Quartz 2D Programming Guide या Animation Types and Timing Programming Guide देखें।

इस एनीमेशन का उपयोग करने के लिए, आप निम्नलिखित की तरह कुछ का उपयोग कर अपने दृश्य की परत में जोड़ने के लिए की आवश्यकता होगी:

[imageViewForAnimation.layer addAnimation:pathAnimation forKey:@"curveAnimation"]; 
+0

मैं सिर्फ तिरछे अनुवाद का घायल हो गया, और यह काफी अच्छा लग रहा था, इसलिए सवाल थोड़े अप्रचलित हो गया। मैं वास्तव में ब्रैड की विधि को आजमाने के लिए पर्याप्त परवाह नहीं करता, लेकिन यकीन है, यह सही लगता है। : पी उत्तर के रूप में चिह्नित। – bpapa

+3

मैंने अभी कोशिश की और यह अच्छी तरह से काम करता है। ;) – Euan

0

ऐसा लगता है कि आपको समय-समय पर ट्रांसफॉर्म प्रॉपर्टी को CGAffineTransformTranslate पर सेट करना होगा, जो पैराबोला के साथ चुने गए एक्स, वाई पैरामीटर के साथ बनाया गया है (क्या रसेल ने वाई से एक्स प्राप्त करने का सुझाव दिया है या इसके विपरीत)।

यदि आप अपनी कार को पैराबोला के साथ वक्र के रूप में घूमना चाहते हैं (अधिक यथार्थवादी दिखेंगे) तो आपको CGAffineTransormRotate की आवश्यकता होगी। जिस बिंदु पर आप वर्तमान में चित्रित कर रहे हैं उस पर पैराबोला की ढलान के आधार पर कोण का निर्धारण करें। ढलान से कोण की गणना करने के लिए आपको एक एटान() फ़ंक्शन की आवश्यकता होगी। दर्द की तरह लगता है, उम्मीद है कि एक आसान तरीका है।

मुझे सच में नहीं पता कि मैं किस बारे में बात कर रहा हूं, मैंने बस इस ब्लॉग एंट्री को पढ़ा है: Demystifying CGAffineTransform

+0

ठीक है यह एक बड़े पैमाने पर गधे दर्द की तरह लगता है। मुझे लगता है कि मैं कोशिश करने और करने के लिए क्या कर रहा हूं इसके बजाय एक घूर्णन और अनुवाद जोड़ता हूं, जो आपके उत्तर से प्रेरित है। अरे, मेरी इच्छा है कि मैंने 10 साल पहले उस रैखिक बीजगणित वर्ग में थोड़ी अधिक ध्यान दिया ... – bpapa

3

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

0

मुझे लगता है कि स्प्लिंस का उपयोग करने के लिए टोकन मैकगुय का सुझाव एक अच्छा है। दोबारा, मुझे नहीं पता कि मैं किस बारे में बात कर रहा हूं लेकिन शायद यह आपको कुछ विचार देगा।

क्या यह बिल्कुल एक पैराबोला होना चाहिए या अनुमानित कार्य होगा? आप क्या करना चाहते हैं rendering text along a curve की तरह लगता है (screenshot भी देखें)। पदों की वह श्रृंखला एक बहुत अच्छी तरह से दिखती है - कोण गणना और सामान बताती है। प्रत्येक "चरित्र" आपकी कार की स्थिति से मेल खाता है। चाप लंबाई पर पैरामीटरिंग सुनिश्चित करता है कि आपका वेग स्थिर है।

जहां तक ​​आईफोन पर ऐसा करने के लिए ... कोई विचार नहीं।

1

, मार्ग के किनारे छवि के रोटेशन शामिल करने के लिए बस को जोड़ने के निम्नलिखित

pathAnimation.rotationMode = @"auto"; 

आप भी क्यों न सिर्फ determi easein/बाहर प्रभाव

pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];