2012-06-09 34 views
5

का उपयोग करके एक एनएसविंडो "फोल्ड" करें तो मैं ऐपकिट और कोको (कोकोटाउच के साथ यूआईकिट से आ रहा हूं) के लिए बिल्कुल नया हूं और मैं वर्तमान में एनएसविंडो को फोल्ड करने के लिए एक इंटरफेस लागू कर रहा हूं। आईओएस पर यह काफी आसान होगा लेकिन यह देखकर कि ओएस एक्स में कितने छोटे अंतर हैं, मैं पूछना चुनता हूं।CoreAnimation

आप निम्न संक्रमण को लागू करने के बारे में कैसे जाएंगे?

Window Fold

नोट: निचले बार मेरी contentView का हिस्सा है और न नीचे बार ओएस एक्स प्रदान करता है। अर्थात। मेरी खिड़की (रास्ते में INAppStoreWindow) शीर्षक शीर्षक और एक सामग्री दृश्य शामिल हैं।

मुझे लगता है कि मैं सामग्री को केवल तब्दील कर सकता हूं और खिड़की को सिंक्रनाइज़ कर सकता हूं लेकिन अगर मैं परिप्रेक्ष्य में परिवर्तन के कारण होता है तो यह पारदर्शिता को संरक्षित करने में सक्षम था, तो यह बेहतर होगा। अर्थात। पक्ष जो अंदर झुकते हैं उन्हें (संक्रमण के दौरान) पारदर्शी होना चाहिए। या मैं इस पर विचार कर रहा हूँ?

उत्तर

2

खराब समाचार पहले: UIKit के विपरीत, ऐपकिट अपने नियंत्रण को प्रस्तुत करने के लिए कोर एनीमेशन का उपयोग नहीं करता है। एनएसवी व्यू के विशेष परत-होस्टिंग उदाहरणों के भीतर सभी कैलियर अपनी दुनिया में रहते हैं। इसलिए जब तक कि आपकी विंडो का सामग्री दृश्य परत-होस्टिंग नहीं है, आप पूरी तरह से हैकरी की उचित डिग्री के बिना अपनी खिड़की की सामग्री के लिए CAAnimations लागू नहीं कर सकते हैं (पूरे सामग्री दृश्य को बिटमैप में प्रस्तुत करना संभव हो सकता है, एक परत की सामग्री के रूप में सेट करें, और उस पर परिवर्तन करें। मुझे यकीन नहीं है)।

उम्मीद है कि आपकी सामग्री दृश्य कोर एनीमेशन-आधारित है। यदि हां, तो आपके द्वारा वर्णित दृष्टिकोण काम करना चाहिए। आपको परत को पारदर्शी सीमाहीन, एनएसविंडो में होस्ट करने में सक्षम होना चाहिए और फिर सामग्री दृश्य में आपके द्वारा किए गए किसी भी रूपांतरण से डेस्कटॉप इसके पीछे प्रकट होगा। यहाँ एक टुकड़ा (मैट लांग से) कि तुम क्या चाहते करना चाहिए है:

- (id) initWithContentRect: (NSRect) contentRect 
       styleMask: (unsigned int) aStyle 
        backing: (NSBackingStoreType) bufferingType 
        defer: (BOOL) flag 
{ 
    if (![super initWithContentRect: contentRect 
          styleMask: NSBorderlessWindowMask 
          backing: bufferingType 
         defer: flag]) return nil; 
    [self setBackgroundColor: [NSColor clearColor]]; 
    [self setOpaque:NO]; 

    return self; 
} 
+0

हाँ मेरी सामग्री CoreAnimation आधारित है, और मुझे लगता है कि ख़तरा के बारे में पता कर रहा हूँ। NSBorderlessWindowMask के साथ समस्या यह है कि अगर मैं पृष्ठभूमि रंग को साफ़ करने के लिए सेट करता हूं तो सिस्टम विंडो विंडो खींचता है। निश्चित रूप से मैं आगे बढ़ सकता हूं और अपना खुद का प्रस्तुत कर सकता हूं लेकिन वह मूल रूप से अपनी खिड़की को पूरी तरह से चित्रित करने जैसा होगा। मैं इससे बचना चाहता हूं कि ओएस एक्स – pkluz

+0

के बाद के संस्करणों में इंटरफ़ेस के संभावित परिवर्तन के कारण विंडो छाया के साथ आपकी समस्या मानक नियंत्रण वाले एक जैसी है। ऐपकिट कोर एनीमेशन द्वारा प्रस्तुत नहीं किया जाता है, इसलिए जो भी कुछ भी प्रस्तुत करता है, वह कोर एनीमेशन का उपयोग नहीं कर सकता है। आपने इसके बिना किया है या इसे स्वयं लागू कर दिया है। यह बेकार है, मुझे पता है। मुझे लगता है कि यह सामान का सिर्फ एक हिस्सा है जो पुराने एपीआई पर काम करने के साथ आता है ... –