2012-05-13 13 views
5

मैं कैसे अनुवाद के दौरान छवियों का एक सेट (img1 और img2 के बीच अर्थात स्विचिंग) के साथ myLayer.contents बदल सकते हैं दौरान छवि को बदलने? धन्यवाद!अनुवाद

UIImage *myImage = [UIImage imageNamed:@"img1.png"]; 
CALayer *myLayer = [CALayer layer]; 
myLayer.contents = (id)myImage.CGImage; 
myLayer.Position = CGPointMake(0,0); 
myLayer.Bounds=CGRectMake(0.0, 0.0, 50, 50); 
[self.view.layer addSublayer:myLayer]; 

//translation1 
CGPoint startPt = CGPointMake(10,10); 
CGPoint endPt = CGPointMake(100,100);  
CABasicAnimation *transl1 = [CABasicAnimation animationWithKeyPath:@"position"]; 
transl1.removedOnCompletion = FALSE; 
transl1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
transl1.fromValue = [NSValue valueWithCGPoint:startPt]; 
transl1.toValue = [NSValue valueWithCGPoint:endPt]; 
transl1.duration = 3; 
transl1.fillMode = kCAFillModeForwards; 
transl1.beginTime = 0; 
[myLayer addAnimation: transl1 forKey: nil]; 
+1

वास्तव में मुझे लगता है कि वह अनुवाद का मतलब, गणित में अनुवाद समन्वय – MCKapur

उत्तर

2

पैदल आदमी उदाहरण:

मैं बिल्कुल वैसा ही कार्य के साथ पेश किया है, लेकिन मैं एक चल मकड़ी जो 6 पैर पैदल दूरी पर है और 12 फ्रेम है करना था। वास्तव में करना बहुत मुश्किल था और मुझे कुछ महीनों तक सही लगा। बात यह है कि जागने वाला आदमी उदाहरण आमतौर पर UIImageView की एनीमेशन छवि एनीमेशन में छवि फ्रेम (प्रथम चरण, अंतिम चरण) की एक सरणी सेट करके किया जाता है। फिर आप आगे बढ़ने वाले चरित्र के साथ एनीमेशन को चालू और बंद कर देते हैं और इससे चलने का भ्रम पैदा होता है। अब जब आप त्वरण का भ्रम पैदा करना चाहते हैं तो बड़ी समस्या उत्पन्न होती है। एनीमेशन प्लेबैक के दौरान एनीमेशन अवधि बदलने का कोई तरीका नहीं है और यह एक बड़ा झटका है जिसे दूर करना बहुत मुश्किल है।

यहाँ आप चलने पैर फ्रेम के साथ एक सरणी, प्रत्येक चरण में फ्रेम को परिभाषित:

यहाँ कोड है कि मैं इस मुद्दे को दूर करने के लिए उत्पादन किया है।

animationImagesSpider = [NSArray arrayWithObjects: 
[UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], [UIImage imageNamed:@"[email protected]"], nil]; 

यहाँ आप UIImageView करने के लिए सरणी देते हैं:

imgViewSpider = [[UIImageView alloc] initWithFrame:CGRectMake(200,410,100,145)]; 
imgViewSpider.animationImages = animationImagesSpider; 

अब अगर आप बस [imgViewSpider startAnimating] कहते हैं; यह एनीमेशन को तब तक स्थिर गति से शुरू करेगा जब तक आप इसे रोक नहीं देते। इस पर काबू पाने के लिए मैं एक प्रत्यावर्तन कि प्रत्येक चरण के लिए एक छोटी एनीमेशन नाटकों का इस्तेमाल किया है और यह प्रत्येक चरण के बीच की अवधि को समायोजित कर सकते हैं:

- (void) spiderRun { 

    imgViewSpider.animationDuration= 0.51-(accSp/3.5); 
    [imgViewSpider setAnimationRepeatCount:222]; /// this is a dummy value that has no effect because animtion ends after the first frame 
    [imgViewSpider startAnimating]; 
    [self performSelector:@selector(spiderRun) withObject:nil afterDelay: 0.5-(accSp/3.5)]; 

} 

लगातार accSp मूल्य बदलने से, मैं चलने के दौरान पैदल दूरी पर गति को नियंत्रित कर सकते हैं ।

+0

धन्यवाद, मैं कोशिश करने जा रहा हूँ! सीओओ, जिएसेपे – Beppino66

0

आपको दूसरा एनीमेशन अनुवाद 2 बनाना होगा, यह एनीमेशन छवि स्वैप करेगा। आपको अवधि की अवधि में आधा अवधि निर्धारित करने की आवश्यकता होगी ताकि यह अनुवाद 1 एनीमेशन के बीच में गिर जाएगी।

transl1.duration = 3

transl2.duration = 1.5

+0

धन्यवाद, यह ठीक है एक अलग करने के लिए एक वस्तु बढ़ रहा है। मैं आईएमजी 1 पर वापस स्विच करना चाहता हूं, और फिर वापस आईएमजी 2 .... एक गति अनुकरण करने के लिए ..... कोड के किस हिस्से में मैं यह कह सकता हूं? ciao – Beppino66

+0

यह स्पष्ट नहीं है कि छवियों को स्विच करके आप एक गति को उत्तेजित करते हैं। –

+0

मेरे भ्रम के लिए क्षमा करें ...अब मुझे पता है कि अनुवाद, रोटेशन इत्यादि के साथ स्क्रीन में परत को कैसे स्थानांतरित करना है ... समस्या यह है कि अय्यर की सामग्री एक ही तस्वीर है, और मैं इसे एनीमेशन के दौरान बदलना चाहता हूं (उदाहरण के लिए एक चलने वाला आदमी), इसलिए मुझे छवियों के एक सेट के बीच लूप की आवश्यकता है: img1, img2, img1, img2 .... अनुवाद के दौरान ... – Beppino66

1

के रूप में अन्य पोस्टर ने कहा, एक दूसरे एनीमेशन कि एक नई छवि को परत की सामग्री संपत्ति एनिमेट पैदा करते हैं।

मैं एक एनीमेशन समूह में दोनों एनिमेशन डाल, और परत को एनीमेशन समूह को जोड़ने का सुझाव देते हैं। फिर आप दोनों अवधि को आसानी से नियंत्रित कर सकते हैं और दोनों एनिमेशन के समय शुरू कर सकते हैं। आप एनीमेशन के बीच में होने वाली समयावधि की कुल अवधि के हिस्से में छवि स्वैप कर सकते हैं।

आप एनीमेशन beginTime संपत्ति का उपयोग कर, और अवधि संपत्ति के साथ अवधि के शुरू होने से सेट करेंगे।

+0

बहुत धन्यवाद डंकन! ciao – Beppino66