2008-10-31 13 views
5

मेरे पास एक विंडो है जिसमें एनएसबीक्स नियंत्रण होता है। उस एनएसबीक्स में कई अन्य नियंत्रण हैं, (पॉपअप, टेक्स्ट फ़ील्ड्स, इत्यादि ...)परत समर्थित दृश्य और झिलमिलाहट नियंत्रण

मेरे पास दो अन्य एनएसबीक्स एक ही एनआईबी फ़ाइल में हैं जो नियंत्रण से भरे हुए हैं जिन्हें मैं निश्चित रूप से पहले के साथ स्वैप करना चाहता हूं शर्तेँ। मैं इस एक अच्छा पार फीका प्रभाव के साथ हो चाहते हैं, तो मैं निम्न कार्य करें:

NSWindowController के -awakeFromNib विधि में:

[[self.myWindow contentView] setWantsLayer:YES]; 

मेरी विधि में जहाँ मैं विचारों मैं इस कोड का उपयोग कर रहा हूँ स्विचिंग :

[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView]; 

यह ठीक काम करता है, विचारों की तरह ही मैं अपेक्षा करता हूं। समस्या यह है कि विचारों पर नियंत्रण कभी-कभी किसी स्पष्ट कारण के लिए गायब नहीं होता है। यह हमेशा एक ही विचार नहीं है (हालांकि एनएसपीओपअपबटन विशेष रूप से इसके लिए प्रवण प्रतीत होते हैं), और जब वे फोकस करते हैं तो वे आमतौर पर फिर से दिखाई देते हैं।

क्या मुझे सभी नियंत्रण परतों का भी समर्थन करना है?


अद्यतन: स्पष्ट समूह में एनीमेशन को लपेटने से कोई फर्क नहीं पड़ता। निब फ़ाइल में setWantsLayer को चालू करने से भी कोई फर्क नहीं पड़ता है, लेकिन दिलचस्प बात यह है कि जब मैंने ऐसा किया, तब तक एनएसपीओपबूटन गायब हो जाते हैं जब तक उनके दृश्य को क्लिक नहीं किया जाता है। NSPopupbuttons पर मैन्युअल रूप से परत सेट करने से कोई फर्क नहीं पड़ता।

ऐसा लगता है कि अन्य लोगों को इस समस्या पड़ा है, लेकिन मैं किसी भी समाधान तैनात नहीं मिल सकता है: एक दृश्य परत समर्थित है

http://www.cocoabuilder.com/archive/message/cocoa/2008/3/30/202691 http://www.cocoabuilder.com/archive/message/cocoa/2008/4/25/205134

+0

मुझे भी इस समस्या को एनएसपीओपअपबटन और कैलियर के साथ मिला है और मुझे एक सभ्य समाधान नहीं मिला है। –

उत्तर

4

तो अपने सभी subviews परत समर्थित हो जाएगा, तो आप उन्हें परत समर्थित होने के लिए मैन्युअल रूप से सेट करने की आवश्यकता नहीं है। अगर वहाँ यहाँ क्या हो रहा है देखने के लिए पर्याप्त जानकारी है मैं नहीं जानता, लेकिन अगर आप अलग व्यवहार करता है, तो आप एक explict समूह में एनीमेशन लपेट मिल मैं उत्सुक होगा:

[NSAnimationContext beginGrouping]; 
[[[self.myWindow contentView] animator] replaceSubview:previousView with:newView]; 
[NSAnimationContext endGrouping]; 

इसके अलावा, वहाँ एक है कारण है कि आप setWantsLayer को क्यों बुला रहे हैं: जागने में FnNib को बस इसे निब में सेट करने के बजाय (NSView इंस्पेक्टर में एक चेकबॉक्स होना चाहिए)।