2013-01-08 26 views
5

मेरे पास एक NSWindow है जो वर्तमान समय को प्रदर्शित करने के लिए हर सेकेंड को अपडेट किया जाता है।यह पता लगाने के लिए कि क्या एनएसविंडो का कोई भी हिस्सा वर्तमान में दृश्यमान है (केवल आदेश नहीं दिया गया है)

यह चित्र काफी प्रोसेसर गहन है और मैं इसे करने से बचना चाहता हूं जबकि खिड़की पूरी तरह से अन्य विंडो द्वारा अस्पष्ट है।

दुर्भाग्य से, [NSWindow isVisible] यह दिखाता नहीं है कि स्क्रीन पर वास्तव में एक विंडो दिखाई दे रही है, लेकिन केवल स्क्रीन पर पर है या नहीं। मतलब यह है कि खिड़की खिड़की की सूची में है लेकिन अन्य खिड़कियों से पूरी तरह से अस्पष्ट है visible == हाँ, मेरे कस्टम drawRect को बुलाया जाता है और मैं सबकुछ एक बफर में खींचता हूं जिसका उपयोग कभी नहीं किया जाता है।

क्या यह पता लगाने का कोई तरीका है कि कोई विंडो और इसकी सामग्री वास्तव में स्क्रीन पर दिखाई देने वाली है?

किसी भी मदद की बहुत सराहना की जाएगी।

उत्तर

4

10.9 पर आप NSWindow's -occlusionState और संबंधित प्रतिनिधि विधि का उपयोग कर सकते हैं।

रिलीज नोट्स से:

विंडोज अवरोधित माना जाता है शीर्षक पट्टी और उपकरण पट्टी, सहित उनके पूरे सामग्री, एक और अपारदर्शी खिड़की के अंतर्गत आने वाले 100% है। विंडोज़ को भी स्क्रीन से ऑर्डर किया जाता है, डॉक को कम किया जाता है, या किसी अन्य स्थान पर। के रूप में आंशिक रोड़ा मायने रखता है

उदाहरण "दिखाई दे।":

- (void)windowDidChangeOcclusionState:(NSNotification *)notification 
{ 
    if ([[notification object] occlusionState] & NSWindowOcclusionStateVisible) { 
     // visible 
    } else { 
     // occluded 
    } 
} 
+0

धन्यवाद। मैंने देखा कि एपीआई में बदलाव .. मजाकिया है कि उस एपीआई को वहां प्राप्त करने में कितना समय लगा :-) –