2014-10-19 14 views
16

NSWindow के साथ वाइब्रेंट डार्क (NSAppearanceNameVibrantDark) या वाइब्रेंट लाइट (NSAppearanceNameVibrantLight) मोड का उपयोग करने का सही तरीका क्या है?एनएसविंडो पर आप अंधेरे कंपन का उपयोग कैसे करते हैं?

मैं एक एप्लिकेशन बना रहा हूं और मुख्य अनुप्रयोग के NSWindow के विकल्प के रूप में नई वाइब्रेंट डार्क उपस्थिति पेश करना चाहता हूं। खिड़की स्वयं एक सुंदर सीधी आगे की खिड़की है जिसमें शीर्ष पर NSToolbar और मुख्य सामग्री क्षेत्र के रूप में एक स्क्रॉल दृश्य है।

NSVisualEffectsView के साथ संयोजन में नई कंपन उपस्थिति का उपयोग करने पर ऐप्पल से बहुत सारी जानकारी है, लेकिन मैं NSWindow पर उन उपस्थितियों का उपयोग करने के तरीके पर स्पष्टीकरण की तलाश में हूं।

NSAppearance.h शीर्षलेख फ़ाइल में, एक टिप्पणी है जिसमें कहा गया है कि जीवंत उपस्थिति केवल NSVisualEffectsView पर सेट की जानी चाहिए। NSWindow पर इसका समर्थन करने का कोई उल्लेख नहीं है।

डब्ल्यूडब्ल्यूडीसी वीडियो यह सुनिश्चित करने के बारे में बात करते हैं कि आप परत-समर्थित विचारों का उपयोग कर रहे हैं और आप नए जीवंत उपस्थितियों का उपयोग करते समय अपने सबव्यूव्स पर कंपन को अनुमति दे रहे हैं, लेकिन फिर, NSWindow पर उनका उपयोग करने का कोई उल्लेख नहीं है।

विजुअलएफ़क्ट्स प्लेग्राउंड नमूना कोड में फ़ैक्सटाइम-जैसे एप्लिकेशन का उदाहरण है जो अंधेरे कंपन मोड का उपयोग करता है, लेकिन इसमें टूलबार नहीं है और यह पूर्ण-सामग्री मास्क का उपयोग करता है।

कि जानकारी से, मैं कर रहा हूँ मेरी NSWindowController's windowDidLoad विधि में निम्नलिखित:

[self.window.contentView setWantsLayer:YES]; 
self.window.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]; 

और, यकीन है कि पर्याप्त, मैं एक काले रंग की विंडो शीर्षक पट्टी के साथ एक काले रंग की NSToolbar मिलता है। तो यह दिखता है जैसे यह ठीक से काम कर रहा है, लेकिन जब मेरा स्क्रोलव्यू NSToolbar के तहत मानक पारदर्शिता (छवियों के थंबनेल) को स्क्रॉल करता है और विंडो का शीर्षक पट्टी या तो मौजूद नहीं है या यादृच्छिक रूप से मौजूद है। ऐसा कोई प्रतीत नहीं होता है। कभी-कभी जब मैं स्क्रॉलव्यू स्क्रॉल करता हूं, तो सामग्री टूलबार और शीर्षक पट्टी के नीचे "धुंधला" स्थिति में दिखाई जाती है। अन्य बार जब मैं स्क्रॉल करता हूं, टूलबार और टाइटलबार सिर्फ एक अपारदर्शी काला होता है। (टाइटल बार और टूलबार अभी भी उनके शीर्षक और बटन खींचते हैं।)

जब मैं विंडो के सामग्री दृश्य के लिए परत का अनुरोध नहीं करता, तो मुझे "शुद्ध" काले रंग की बजाय एक ग्रे टाइटलबार और विंडो शीर्षक मिलता है । (मेरे scrollview की पृष्ठभूमि का रंग तो सफेद, गहरे भूरे रंग या काले हो सकता है।)

कोई मदद या कैसे ठीक एक NSWindow कॉन्फ़िगर करने के लिए नई जीवंतता दिखावे उपयोग करने के लिए (है कि एक NSToolbar और एक NSScollView शामिल हैं) पर स्पष्टीकरण बहुत सराहना की जाएगी ।

+0

http://stackoverflow.com/questions/24414483/how-can-i-use-nsvisualeffectview-in-windows-title-bar/24439689#24439689 – geowar

उत्तर

6

यह एक अंधेरे मोड विंडो बना देगा। इसके बाद, खिड़की में सब कुछ (टाइटलबार, टूलबार और यहां तक ​​कि संवाद शीट सहित) अंधेरा हो जाएगा।

let USE_DARK_MODE = true 
    if USE_DARK_MODE { 
     window.appearance = NSAppearance(named: NSAppearanceNameVibrantDark) 
     window.invalidateShadow() 
    } 

invalidateShadow आवश्यक नहीं है लगते, लेकिन कभी कभी छाया ठीक से काम नहीं करता है तो कमी रह गई थी। (ओएस एक्स 10.10)

+0

धन्यवाद, लेकिन मैं करने की उम्मीद कर रहा था इस बारे में अधिक समझ प्राप्त करें कि क्या संपूर्ण विंडो ('contentView') को परत का समर्थन करने की आवश्यकता है या नहीं, और यदि, बिल्कुल, एक NSVisualEffectView डालने की आवश्यकता है। बस विंडो की 'उपस्थिति' संपत्ति को सेट करना मेरे लिए स्पष्ट है, जो पूरी तरह से स्पष्ट नहीं है यह है कि यह विंडो में हर दूसरे नियंत्रण के 'प्रभावी अप्परेंस' को कैसे प्रभावित करता है। – kennyc

3

मुझे लगा कि आप NSWindowController उपclass कर सकते हैं। आईबी में अपने कस्टम कंट्रोलर के लिए कक्षा को अपने कस्टम NSWindowController पर सेट करें।कि windowDidLoad समारोह

self.window?.titlebarAppearsTransparent = true 

इसके अलावा NSWindow के लिए गुण निरीक्षक में सेट "पूर्ण आकार सामग्री देखें" में करने के बाद।

enter image description here

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