2011-05-04 25 views
9

भरने का एनीमेट करें, मैं इस महान आलेख, http://oleb.net/blog/2010/12/animating-drawing-of-cgpath-with-cashapelayer में उल्लिखित एक कैशपलेयर का उपयोग करके पथ खींचने के साथ खेल रहा हूं, लेकिन मुझे आश्चर्य है कि एक परत भरने को एनिमेट करने का कोई तरीका है या नहीं।एनिमेट को एक कैशपलेयर

उदाहरण के लिए, मेरे पास कुछ पाठ है जो मैं स्क्रीन पर आकर्षित करना चाहता हूं, लेकिन मैं केवल पाठ का स्ट्रोक खींचने में सक्षम हूं और भरने में नहीं हूं। एक और उदाहरण, मेरे पास एक सितारा आकार है जिसे मैं इसे भरने के लिए एनिमेट करना चाहता हूं।

क्या यह एक कैशपलेयर या अन्य ऑब्जेक्ट का उपयोग कर संभव है?

धन्यवाद!

+0

आपके मन में किस प्रकार की एनीमेशन है? चल रहा स्ट्रोक? नीचे से ऊपर या बाएं से दाएं भरना? क्रॉस-फीड रंग? –

उत्तर

-1

हां, यह संभव है।

कैशपलेयर के पास एक भरने वाली संपत्ति है जो एनिमेटेबल है।

यह स्ट्रोक एंड/स्ट्रोक स्टार्ट को बदलने जैसा ही काम करता है जैसे आपने पहले ही अपनी एनीमेशन के साथ किया है।

2

इसका अधिकांश समय एक ही कोड है, आपको अपने CABasicAnimation के fromValue और toValue के लिए अलग-अलग मान सेट करना होगा। StrokeEnd के लिए

एनीमेशन

+ (CABasicAnimation *)animStrokeEndWithDuration:(CGFloat)dur 
             delegate:(id)target{ 
    CABasicAnimation *animLine = 
    [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
    [animLine setDuration:dur]; 
    [animLine setFromValue:[NSNumber numberWithFloat:0.0f]]; 
    [animLine setToValue:[NSNumber numberWithFloat:1.0f]]; 
    [animLine setRemovedOnCompletion:NO]; 
    [animLine setFillMode:kCAFillModeBoth]; 
    [animLine setDelegate:target]; 
    [animLine setTimingFunction: 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

    return animLine; 
} 

एनीमेशन fillColor के लिए

+ (CABasicAnimation *)animFillColorWithDur:(CGFloat)dur 
            startCol:(UIColor *)start 
            endColor:(UIColor *)end 
            delegate:(id)target{ 

    CABasicAnimation *animFill = 
    [CABasicAnimation animationWithKeyPath:@"fillColor"]; 
    [animFill setDuration:dur]; 
    [animFill setFromValue:(id)start.CGColor]; 
    [animFill setToValue:(id)end.CGColor]; 
    [animFill setRemovedOnCompletion:NO]; 
    [animFill setDelegate:target]; 
    [animFill setFillMode:kCAFillModeBoth]; 

    return animFill; 
} 

लौटे CABasicAnimation सिर्फ एक CAShapeLayer को जोड़ा जाना आवश्यक है: मैं एक वर्ग जो मुझे देता है एक CABasicAnimation बनाया:

[_myShapeLayer addAnimation:returnedAnimation forKey:@"animKey"] 
संबंधित मुद्दे