2009-07-03 18 views
5

यह शायद एक साधारण सवाल है लेकिन मुझे यह पता लगाना प्रतीत नहीं होता कि यह कैसे करना है। मूल रूप से सभी मैं करना चाहता हूँ बंद करने से पहले एक खिड़की नहीं हो पाती है:एनिमेटर को समाप्त करने के लिए कैसे प्रतीक्षा करें?

[[window animator] setAlphaValue:0.0]; 
[window close]; 

यह [विंडो बंद] के बिना ठीक काम करता है, लेकिन जब कि शामिल किया गया है खिड़की एनीमेशन खत्म होने से पहले ही बंद करने के लिए लगता है (जो स्पष्ट रूप से है जो मैं चाहता हूं वह नहीं); ऑर्डर के लिए ऐसा ही प्रतीत होता है: लेकिन प्रदर्शन करें: आदि। क्या इससे बचने का कोई तरीका है?

उत्तर

8
[[window animator] setAlphaValue:0.0]; 
[window performSelector:@selector(performClose:) withObject:self afterDelay:[[NSAnimationContext currentContext] duration]]; 
+0

currentContext को संदेश -animationDuration होना चाहिए, -delay नहीं। – kperryua

+0

धन्यवाद। मैं इस का उपयोग कर समाप्त हो गया: \t [खिड़की performSelector: @selector (करीब) \t withObject: शून्य \t afterDelay: [[NSAnimationContext currentContext] अवधि]]; – Michael

+0

डी ओह! यह सही है .. मेरा बुरा। :-) – kperryua

3

दीवार के समय पर चलने वाले एनिमेटर प्रॉक्सी के माध्यम से लागू एनिमेशन सक्रिय हो गए। वर्तमान NSAnimationContext से अवधि प्राप्त करें और उस अंतराल का उपयोग करके अपने क्लीनअप/पोस्ट-एनीमेशन संचालन में देरी करें।

3

यह अप्रचलित उत्तर के साथ एक पुराना (लेकिन अभी भी लोकप्रिय) प्रश्न है।

सही तरीके से समाप्त हो गया completionHanler इस तरह के साथ विशेष NSAnimationContext के वर्ग पद्धति का उपयोग करके किया जाता है एनिमेटर के लिए इंतजार करना:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){ 
    // Start some animations here. 
    [[window animator] setAlphaValue:0.0]; 
} completionHandler:^{ 
    // This block will be invoked when all of the animations started above have completed or been cancelled. 
    NSLog(@"All done!"); 
}]; 
संबंधित मुद्दे

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