2011-03-09 13 views
8

मैंने एक स्लिम NSScroller सबक्लास बनाया है, लेकिन documentView को अलग करने के बजाय NSScrollView के शीर्ष पर इसे ओवरले बनाने के तरीके को समझ नहीं सकता है।एनएसएसक्रॉलव्यू और पारदर्शी, ओवरले एनएसएसक्रॉलर सबक्लास

enter image description here

यहाँ आप एक NSCollectionView है कि मैं 100% विस्तृत करना चाहते हैं की पृष्ठभूमि देखते हैं, और शीर्ष के साथ स्क्रोलर बैठ कर सकते हैं। वर्तमान में, मुझे स्क्रॉलर में एक सफेद पृष्ठभूमि सेट करनी है क्योंकि clearColor के साथ ड्राइंग पारदर्शी, लेकिन काले रंग के रूप में नहीं दिख रहा है।

क्या मैं इस बारे में गलत तरीके से जा रहा हूं? क्या में यहां कुछ भूल रहा हूँ? मैं एक पारदर्शी-ट्रैक NSScroller के व्यवहार को कैसे प्राप्त कर सकता हूं जो NSScrollView की सामग्री के ऊपर बैठता है?

उत्तर

8

मैं उपवर्ग NSSCROLLVIEW

- (void)tile { 
    [super tile]; 
    [[self contentView] setFrame:[self bounds]]; 
} 

के में tile को लागू करने से स्थिति प्राप्त करने में सक्षम था और यह पता चला है कि स्पष्ट रंग आकर्षित करने के लिए कोशिश कर समस्या के साथ शुरू हो गया था। स्क्रोलर उपवर्ग में, मैं तो बस किसी भी ड्राइंग कि, पूरी तरह से अधिभावी NSSCROLLER उपवर्ग के DRAWRECT: द्वारा स्लाइडर ट्रैक के साथ करना था अतः तरह छोड़े गए:

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [self drawKnob]; 
} 

enter image description here

+1

ट्रैक के साथ क्या करना था ड्राइंग से छुटकारा पाने के बारे में उल्लेख करने के लिए धन्यवाद! मैं इसे एक स्पष्ट रंग में स्थापित करने की कोशिश कर रहा था लेकिन यह सब कुछ गड़बड़ कर रहा था। इसे हटा दिया और सब अच्छा है! धन्यवाद! –

-1

इस रंग के बारे में क्या है: [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0] मुझे लगता है कि आपको इंटरफ़ेस बिल्डर के साथ आकार संशोधित करना होगा।

+0

clearColor में ही है। समस्या आकार में नहीं है, लेकिन एनएसएसक्रॉलर का व्यवहार है। मानक व्यवहार सामग्री को किनारे पर धक्का देना और बार खींचना है, मैं चाहता हूं कि सामग्री को एक तरफ धक्का न दिया जाए, और बार को शीर्ष पर खींचा जाए। – coneybeare

1

ध्यान दें कि काम करने के लिए इस के लिए ठीक है, आपको scrollView के लिए परत-बैकिंग सक्षम करना होगा!

है, फोन:

[scrollViewInstance setWantsLayer:YES]; 

या इंटरफ़ेस बिल्डर में यह निर्धारित किया है।

यदि आप ऐसा नहीं करते हैं, तो scrollView की सामग्री दृश्य स्क्रॉलर्स के शीर्ष पर खींचेगा। इसके अलावा: आपको अवगत होना चाहिए कि आप जो कर रहे हैं वह अनिवार्य रूप से दो एनएसवीव्स (एनएसएससीआरएलवी के शीर्ष पर एनएसएसक्रॉलर - एनएसवी व्यू के उत्तराधिकारी के ऊपर) को ओवरलैप कर रहा है। आईओएस पर यूआईवीव्यू के विपरीत, ओएस एक्स पर एनएसवीव्स को ओवरलैप करना आधिकारिक तौर पर किसी भी मौजूदा संस्करण द्वारा समर्थित नहीं है ओएस (10.6 नीचे) के। कैलियर चालू करना यह काम करता है, लेकिन यह अभी भी कुछ ध्यान में रखना है। बेशक, परतों को चालू करना ड्राइंग प्रदर्शन को गंभीरता से मार सकता है।

और अधिक विस्तार के लिए इस तो सवाल यह देखें: Is there a proper way to handle overlapping NSView siblings?

+0

यह मेरी एक पारदर्शी स्क्रॉलबार के साथ एक अजीब समस्या का समाधान कर रहा था: यह कभी-कभी दिखाई देने पर सफेद चमक जाएगा, फिर बाद में दो या दो बार सही ढंग से खींचेगा। – robotspacer

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