2012-07-24 15 views
6

मैं छोटे टाइल में स्क्रीन को अलग कर रहा हूँ, तो प्रत्येक टाइल एनिमेट एक संक्रमण प्रदर्शन करने के लिए:एकाधिक CALayers एनिमेशन - भरें मोड

for (int x=0; x<number_of_x_splits; x++) { 

    for (int y=0; y<number_of_y_splits; y++) { 

     CGSize splitSize = CGSizeMake(screenBounds.width/number_of_x_splits, screenBounds.height/number_of_y_splits); 

     CATransformLayer *transformLayer = [CATransformLayer layer]; 
     [transformLayer setFrame:CGRectMake(splitSize.width * x, splitSize.height * y, splitSize.width, splitSize.height)]; 
     [transformLayer setPosition:CGPointMake((splitSize.width * x) + splitSize.width/2, (splitSize.height * y) + splitSize.height/2)]; 

     ... adding some sublayers to transformLayer... 

     CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]; 
     [rotate setDuration:5.0]; 
     [rotate setFromValue:[NSNumber numberWithFloat:0]]; 
     [rotate setToValue:[NSNumber numberWithFloat:M_PI]]; 
     [rotate setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
     [rotate setTimeOffset:(1/(number_of_x_splits + number_of_y_splits)) * (x+y)]; 
     [rotate setFillMode:kCAFillModeForwards]; 
     [rotate setRemovedOnCompletion:NO]; 
     [transformLayer addAnimation:rotate forKey:@"transform.rotation.y"]; 

    } 
} 

समस्या यह है कि केवल श्रृंखला में पिछले CALayer अंतिम स्थिति में बनी हुई है। मैं भी CALayer अंतिम बदलने मान सेट करने की कोशिश की है:

[transformLayer setTransform:CATransform3DMakeRotation(M_PI, 0, 1, 0)]; 

मुझे लगता है कि यह पाश में CALayer का एक और उदाहरण बनाने पिछले परत के गुण रीसेट साथ क्या करना है।

किसी के पास कोई सुझाव है कि स्थिति का समाधान कैसे करें?

उत्तर

6

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

याद रखें कि शुरू समय होना चाहिए CACurrentMediaTime() + yourDelay


timeOffset और beginTime के बीच का अंतर इस तरह समझा जा सकता है। मुझे पता है कि मैंने पहले इस दृष्टांत को देखा है, मुझे बस यह नहीं मिला।

Normal animation | 12345678 | 
Begin time   |  12345678 | 
Time offset   | 5678  | 
+0

दरअसल !! यह हल करता है। अब से कोई टाइम ऑफसेट नहीं !! बहुत धन्यवाद! – Nimrod7

+2

स्टार्टटाइम CACurrentMediaTime() + yourDelay होना चाहिए जब तक कि एनीमेशन एनीमेशन समूह का हिस्सा न हो। उस स्थिति में यह मूल एनीमेशन समूह की शुरुआत से शुरू होने पर आधार का मान मानता है। –

+0

@DuncanC बहुत अच्छा बिंदु। –

संबंधित मुद्दे