2012-09-16 18 views
16

मैं एक कैलियर एनीमेशन बनाना चाहता हूं जो 'चमकदार' प्रभाव प्रदान करता है। इसके लिए मैं 'अस्पष्टता' संपत्ति को एनिमेट करने की कोशिश कर रहा हूं, लेकिन मेरी समस्या यह है कि मुझे नहीं पता कि कहां से शुरू करना है और इसे कैसे करना है।कैलियर अस्पष्टता एनीमेशन

यहाँ एनीमेशन के एक चित्रमय विवरण है:

opacity 
    | ___ 
1 | | | 
    | | | * repeatCount 
0 |___| |_ . . . 
    -------------------------> time 
    |______| 
    duration 

अस्पष्टता 0 पर शुरू होता है, तो फिर से 0, 1 को एनिमेट तो (इस 0 से 1 करने के लिए 0 एनीमेशन एक नंबर लेता है अवधि के बराबर सेकंड के)। फिर इस प्रक्रिया को 'repeatCount' बार दोहराया जाता है।

float duration = ...; // 0.2 secs, 1 sec, 3 secs, etc 
int repeactCount = ...; // 1, 2, 5, 6, ect 

CALayer* layer = ...; // I have a CALayer from another part of the code 
layer.opacity = 0; 

// Animation here 

done = YES; // IN THE END of the animation set this ivar to yes 

सबसे अच्छा तरीका यह है, क्या है:

यहाँ कोड पर कुछ पृष्ठभूमि है? मैंने कभी पहले कैलियर का उपयोग नहीं किया है, इसलिए यह सीखने का एक अच्छा अवसर भी है कि उनकी एनीमेशन प्रणाली कैसे काम करती है। वैसे, मैंने दस्तावेज़ों की खोज की है और मैं समझता हूं कि आप एक या दो साधारण एनिमेशन कैसे जोड़ते हैं, लेकिन मुझे नहीं पता कि यह विशेष कैसे करें।

+0

ग्राफ XD –

उत्तर

40

इसे पूरा करने का सबसे अच्छा तरीका CABasicAnimation का उदाहरण बनाकर और परत में जोड़कर एक स्पष्ट एनीमेशन (guide देखें) का उपयोग करना है।

कोड कुछ इस तरह दिखेगा:

CABasicAnimation *flash = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
flash.fromValue = [NSNumber numberWithFloat:0.0]; 
flash.toValue = [NSNumber numberWithFloat:1.0]; 
flash.duration = 1.0;  // 1 second 
flash.autoreverses = YES; // Back 
flash.repeatCount = 3;  // Or whatever 

[layer addAnimation:flash forKey:@"flashAnimation"]; 

आप को पता है जब एनीमेशन किया जाता है आप एक प्रतिनिधि के सेट और animationDidStop:finished: विधि लागू कर सकते हैं चाहते हैं, लेकिन यह है कि के रूप में एक पूरा होने के ब्लॉक का उपयोग करने के सबसे अच्छा है सभी कोड एक ही स्थान पर होने की अनुमति देता है। यदि आप आईओएस 4 या ओएस एक्स के लिए लिख रहे हैं तो आप इसे पूरा करने के लिए उत्कृष्ट CAAnimationBlocks श्रेणी का उपयोग कर सकते हैं।

+0

के लिए अपवोट धन्यवाद! यह पूरी तरह से काम करता है। बस एक बात: यह 'एनीमेशन WithKeyPath है:' – Alex

+0

@Alex ठीक है, मैं जवाब अपडेट करूंगा (यह स्मृति से था - हमेशा सबसे विश्वसनीय स्रोत नहीं ...) – trojanfoe

+0

मुझे समझ में नहीं आता है। यह fades में और फिर यह तुरंत गायब हो जाता है। –

0

Trojanfoe का उत्तर उत्कृष्ट है। मैं सिर्फ यह जोड़ना चाहता हूं कि यदि आप "टाइमलाइन" पर अधिक नियंत्रण चाहते हैं (इसे कितना समय तक बाहर निकालना चाहिए? तो हमें कब तक इंतजार करना चाहिए? तो इसे कितना समय लगाना चाहिए? और इसी तरह) आप एक CAAnimationGroup में एकाधिक CABasicAnimation एस को गठबंधन करना चाहते हैं।

आपको इस विषय पर मेरी किताब अध्याय को पढ़ने के लिए चाहते हो सकता है, अंतिम भाग जिनमें से एक ट्यूटोरियल CAAnimation और उसकी संतान पर गठन:

http://www.apeth.com/iOSBook/ch17.html#_core_animation

ध्यान दें कि मेरी चर्चा आईओएस में निर्देशित है; मैक ओएस एक्स पर, यदि वह वही है, तो दृश्य/परत आर्किटेक्चर थोड़ा अलग है, लेकिन सीएएनीमेशन के बारे में जो भी कहता है वह अभी भी सही है।