2011-04-21 16 views
5

मेरे पास एक एनएसवीव है और मैं पृष्ठभूमि के लिए एक छवि खींचने के लिए ड्रॉ रेक्ट का उपयोग करता हूं। इसमें 3 सबव्यूज़ एनएसबूटन भी हैं। समस्या यह है कि जब भी माउस बटन पर नीचे होता है, तो अन्य बटन गायब हो जाते हैं। लेकिन जब मैं ड्रॉ रेक्ट विधि को हटा देता हूं, तो ऐसा नहीं होता है। तो मुझे लगता है कि छवियों को चित्रित करने के लिए इसे ड्रॉ रेक्ट विधि के साथ करना है।NSView subviews के साथ हस्तक्षेप drawRect?

मैं इससे कैसे बच सकता हूं? धन्यवाद।

संपादित करें: ठीक है, मुझे पता चला कि समस्या कहां है। असल में, मेरे पास एक NSMenuItem है, और मैं इसके अंदर 3 बटन के साथ एक दृश्य डाल रहा हूँ। लेकिन एनएसएमएनयू में, शीर्ष पर, 4 पिक्सल का पैडिंग है। समाधान से Gap above NSMenuItem custom view

वहाँ drawRect विधि में एक पंक्ति है::

[[NSBezierPath bezierPathWithRect:fullBounds] setClip]; 

पल, मैं इस लाइन हटाने, और बटन तो, मूल रूप से, कि गद्दी दूर करने के लिए मैं यहाँ समाधान प्रदान की इस्तेमाल किया ठीक से व्यवहार करें। लेकिन फिर, शीर्ष पर पैडिंग दूर नहीं जाता है।

- (void) drawRect:(NSRect)dirtyRect { 

    [[NSGraphicsContext currentContext] saveGraphicsState]; 

    NSRect fullBounds = [self bounds]; 
    fullBounds.size.height += 4; 
    [[NSBezierPath bezierPathWithRect:fullBounds] setClip]; 

    NSImage *background = [NSImage imageNamed:@"bg.png"]; 
    [background drawInRect:fullBounds fromRect:NSZeroRect operation:NSCompositeCopy fraction:100.0]; 

    [[NSGraphicsContext currentContext] restoreGraphicsState]; 
} 
+0

क्या आप अपना कस्टम 'drawRect:' पोस्ट कर सकते हैं? –

+0

drawRect विधि पोस्ट की गई। धन्यवाद। – user635064

उत्तर

0

आप यह सुनिश्चित करें कि उन बटन वास्तव में कर रहे subviews, और सिर्फ दृश्य आपको ड्राइंग कर रहे हैं पर रखा नहीं कर रहे हैं:

यहाँ मेरी drawRect है?

+0

उत्तर के लिए धन्यवाद। हां, मुझे यकीन है, लेकिन, मुझे लगा कि समस्या का कारण क्या है, मुझे नहीं पता कि इसे कैसे ठीक किया जाए। कृपया मेरा मूल प्रश्न फिर से पढ़ें क्योंकि मैंने इसे संपादित किया और समस्या को विस्तार से समझाया। एक बार फिर धन्यवाद। – user635064

3

लिंक किए गए प्रश्न का समाधान ग्राफिक्स स्थिति को सहेजने और पुनर्स्थापित करने में शामिल नहीं है, जो एक अच्छा विचार है जब आप उस व्यक्ति को संशोधित कर रहे हैं जिसे आपने नहीं बनाया है। इसे आज़माएं:

- (void)drawRect:(NSRect)dirtyRect { 
    // Save the current clip rect that has been set up for you 
    [NSGraphicsContext saveGraphicsState]; 
    // Calculate your fullBounds rect 
    // ... 
    // Set the clip rect 
    // ... 
    // Do your drawing 
    // ... 
    // Restore the correct clip rect 
    [NSGraphicsContext restoreGraphicsState] 
+0

उत्तर के लिए धन्यवाद, लेकिन यह काम नहीं किया। साथ ही, मुझे लगता है कि आपका मतलब है ग्राफिक्सस्टेट और पुनर्स्थापित ग्राफिक्सस्टेट? एक बार फिर धन्यवाद। – user635064

+0

@ user635064: मेरा मतलब था कि, हाँ, धन्यवाद; मैं पूरे दिन टाइपो बना रहा हूं। आपको अभी भी इसका उपयोग करना चाहिए, भले ही यह आपकी समस्या को सीधे संबोधित न करे; यह दूसरों को रोक देगा। –

+0

धन्यवाद, करेंगे। – user635064