2011-09-28 15 views
9

साथ कार्य करना। मैं अक्षरों को दिखने की कोशिश कर रहा हूं जैसे उन्हें स्क्रीन के शीर्ष से छोड़ा जा रहा है, इसके बाद अच्छे प्रतिकृतियां कम हो जाएंगी जो कम और कम दिखाई देगी। मैंने इस प्रभाव को करने में कामयाब रहा है लेकिन पूरी तरह से नहीं।मैं CAReplicatorlayer, CATextLayer और बहुत ही बुनियादी एनिमेशन के साथ एक शांत पाठ प्रभाव पैदा करने की कोशिश कर रहा है CAReplicatorLayer

अभी तक यह है कि मैं क्या मिल गया है है:

  1. दोहराया परतों अंतिम बिंदु में शुरू कर रहे हैं:

    CATextLayer *messageLayer = [CATextLayer layer]; 
    
    [messageLayer setForegroundColor:[[UIColor blackColor] CGColor]]; 
    [messageLayer setContentsScale:[[UIScreen mainScreen] scale]]; 
    [messageLayer setFrame:CGRectMake(0, 0, 40, 40)]; 
    [messageLayer setString:@"A"]; 
    
    
    CAReplicatorLayer *replicatorX = [CAReplicatorLayer layer]; 
    
    //Set the replicator's attributes 
    replicatorX.frame = CGRectMake(0, 0, 40, 40); 
    replicatorX.anchorPoint = CGPointMake(0,0); 
    replicatorX.position = CGPointMake(0, 0); 
    replicatorX.instanceCount = 9; 
    replicatorX.instanceDelay = 0.15; 
    replicatorX.instanceAlphaOffset = -0.1; 
    
    replicatorX.zPosition = 200; 
    replicatorX.anchorPointZ = -160; 
    
    [replicatorX addSublayer:messageLayer]; 
    
    [self.view.layer addSublayer:replicatorX]; 
    
    
    messageLayer.position = CGPointMake(40, 400); 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"]; 
    animation.fromValue = [NSNumber numberWithInt:0];; 
    animation.toValue = [NSNumber numberWithInt:400]; 
    animation.duration = 3; 
    [messageLayer addAnimation:animation forKey:@"s"]; 
    

    मैं दो समस्याएं हैं।

  2. जब मुख्य परत अपने अंतिम एनिमेटेड बिंदु तक पहुँचने एनिमेशन बंद हो और दोहराया परतों उनकी एनीमेशन पूर्ण नहीं कर सकता।

उत्तर

5

एनीमेशन वस्तु की fillMode और removedOnCompletion गुणों के सही मूल्यों की स्थापना उम्मीद है कि अपनी समस्याओं का समाधान होगा: "। दोहराया परतों अंतिम बिंदु में शुरू कर रहे हैं"

यह instanceDelay संपत्ति है, जो अपने उदाहरण में 0.15s साथ एनीमेशन विलंब करने के लिए सौंपा मूल्य के कारण होता है। सेव्यू से एनीमेशन प्रस्तुत करने के लिए, आपको एनीमेशन के fillMode को केसीएफ़िलमोडबैकवर्ड पर सेट करके इस देरी के लिए खाते की आवश्यकता है।

animation.fillMode = kCAFillModeBackwards; 

"जब मुख्य परत अपने अंतिम एनिमेटेड बिंदु तक पहुँचने एनिमेशन बंद और दोहराया परतों उनकी एनीमेशन पूरी नहीं कर सके।"

ऐसा इसलिए होता है क्योंकि डिफ़ॉल्ट रूप से "एनीमेशन को लक्ष्य परत के एनिमेशन से पूरा होने पर हटा दिया जाता है।" 1। एनीमेशन विशेषता को हटाकर आप इस डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं।

animation.removedOnCompletion = NO; 

उम्मीद है कि इससे मदद मिलती है। :)