NSAnimation
वास्तव में कई ऑब्जेक्ट्स और उनके गुणों को एनिमेट करने के लिए सबसे अच्छा विकल्प नहीं है।
इसके बजाय, आपको अपने विचार NSAnimatablePropertyContainer
प्रोटोकॉल के अनुरूप बनाना चाहिए।
इसके बाद आप कई कस्टम गुण animatable के रूप में (पहले से ही NSView
द्वारा समर्थित गुण के अलावा) सेट कर सकते हैं, और फिर आप बस गुण चेतन करने के लिए अपने विचार 'animator
प्रॉक्सी का उपयोग कर सकते हैं:
yourObject.animator.propertyName = finalPropertyValue;
अलावा
[NSAnimationContext beginGrouping];
firstObject.animator.propertyName = finalPropertyValue1;
secondObject.animator.propertyName = finalPropertyValue2;
[NSAnimationContext endGrouping];
तुम भी अवधि निर्धारित कर सकते हैं और एक पूर्णता हैंडलर blo की आपूर्ति: एनीमेशन बहुत सरल बनाने से, यह भी आप एक साथ उपयोग कर एक NSAnimationContext
से अधिक ऑब्जेक्ट चेतन करने की अनुमति देता सी.के.:
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.5];
[[NSAnimationContext currentContext] setCompletionHandler:^{
NSLog(@"animation finished");
}];
firstObject.animator.propertyName = finalPropertyValue1;
secondObject.animator.propertyName = finalPropertyValue2;
[NSAnimationContext endGrouping];
NSAnimation
और NSViewAnimation
कक्षाएं एनिमेटर प्रॉक्सी समर्थन की तुलना में बहुत पुराने हैं और मैं अत्यधिक सुझाव है कि आप उन लोगों से दूर ले जाते हैं यदि संभव हो तो। NSAnimatablePropertyContainer
प्रोटोकॉल का समर्थन सभी NSAnimation
प्रतिनिधि सामग्री के प्रबंधन से आसान है। कस्टम टाइम फ़ंक्शंस और समापन हैंडलर के लिए शेर समर्थन का अर्थ है कि वास्तव में ऐसा करने की कोई ज़रूरत नहीं है।
//declare the default animations for any keys we want to animate
+ (id)defaultAnimationForKey:(NSString *)key
{
//in this case, we want to add animation for our x and y keys
if ([key isEqualToString:@"x"] || [key isEqualToString:@"y"]) {
return [CABasicAnimation animation];
} else {
// Defer to super's implementation for any keys we don't specifically handle.
return [super defaultAnimationForKey:key];
}
}
:
एक मानक NSView
वस्तु के लिए, आप अपने दृश्य में एक संपत्ति के लिए एनीमेशन समर्थन जोड़ना चाहते हैं, तो आप सिर्फ अपने ध्यान में रखते हुए +defaultAnimationForKey:
विधि ओवरराइड और संपत्ति के लिए एक एनीमेशन वापस जाने के लिए की जरूरत है मैं एक साधारण sample project बना लिया है पता चलता है कि कैसे एक साथ NSAnimatablePropertyContainer
प्रोटोकॉल का उपयोग कर एक देखने के कई गुण चेतन करने के लिए।
सभी आपके विचार सफलतापूर्वक अद्यतन करने के लिए क्या करने की जरूरत सुनिश्चित करें कि setNeedsDisplay:YES
जब animatable गुण के किसी भी संशोधित कर रहे हैं कहा जाता है बनाते हैं। फिर आप अपने drawRect:
विधि में उन गुणों के मान प्राप्त कर सकते हैं और उन मानों के आधार पर एनीमेशन अपडेट कर सकते हैं।
आप एक सरल प्रगति मूल्य है कि जिस तरह से चीजें NSAnimation
के साथ काम के अनुरूप है चाहते हैं, आप अपने दृश्य पर एक progress
संपत्ति निर्धारित कर सकते हैं और फिर कुछ इस तरह करते हैं: आप तो self.progress
उपयोग कर सकते हैं
yourView.progress = 0;
[yourView.animator setProgress:1.0];
एनीमेशन के वर्तमान मूल्य को जानने के लिए अपने drawRect:
विधि में।
कहाँ दूसरा एनीमेशन है? और चीजों ने किस तरह काम नहीं किया? –