2015-12-16 8 views
8

मै मैक एप्लिकेशन पर काम कर रहा हूं, और मैं प्रारंभिक विंडो को अधिकतम स्थिति में बनाना चाहता हूं, जैसे कि जब आप प्लस साइन के साथ हरे बटन दबा रहे हों। मैं नहीं चाहता कि यह पूर्ण स्क्रीन हो।ओएसएक्स एप्लीकेशन: खिड़की को अधिकतम कैसे बनाया जाए?

उत्तर

5

आप लक्ष्य फ्रेम के रूप में NSScreen के visibleFrame का उपयोग करके अधिकतम उपलब्ध स्थान पर विंडो को "ज़ूम" कर सकते हैं। मान लीजिए कि window चलो अपने NSWindow IBOutlet है:

if let screen = NSScreen.mainScreen() { 
    window.setFrame(screen.visibleFrame, display: true, animate: true) 
} 

उदाहरण के लिए, AppDelegate.swift में:

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    @IBOutlet weak var window: NSWindow! 

    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     if let screen = NSScreen.mainScreen() { 
      window.setFrame(screen.visibleFrame, display: true, animate: true) 
     } 
    } 
+0

क्षमा करें मै मैक दुनिया में बहुत नया हूं। मैंने बस इस कोड को NSViewController में रखा है: viewDidLoad और यह काम नहीं कर रहा है क्या आप मुझे यह बता सकते हैं कि यह कोड बिल्कुल कहां रखा जाए।यह मेरा कोड है यदि स्क्रीन = NSScreen.mainScreen() { self.view.window? .setFrame (screen.visibleFrame, display: true, एनिमेट: सत्य) } –

+0

उदाहरण के साथ मेरा उत्तर अपडेट किया गया है। – Moritz

+1

स्विफ्ट 3 के लिए अपडेट करें: '.main()' के साथ '.mainScreen() 'को प्रतिस्थापित करें। – Moritz

6

अपने जूम राज्य में कोई एप्लिकेशन के रूप में एक ही बात नहीं है "को बड़ा किया।" हरा प्लस आइकन ज़ूम इंगित करता है, जिसका अर्थ है "इस सामग्री के लिए उपयुक्त आकार।" कुछ अनुप्रयोगों में जो दृश्यमान फ्रेम (जैसे एरिक डी चर्चा करता है), लेकिन यह लगभग कुछ भी हो सकता है। उदाहरण के लिए एक सफारी विंडो ज़ूम करने का प्रयास करें।

मान लीजिए कि आप वास्तव में "अधिकतम" और "ज़ूम" नहीं चाहते हैं, तो एरिक सही रास्ते पर है, लेकिन इसे बेहतर किया जा सकता है। सबसे पहले, यदि आपके पास विंडो है तो आपको विंडो की स्क्रीन का उपयोग करना चाहिए। साथ ही, आपको लॉन्च के दौरान विंडो का आकार बदलना नहीं चाहिए (क्योंकि यह लॉन्च पर अजीब लग सकता है)।

func applicationDidFinishLaunching(aNotification: NSNotification) { 
    if let screen = window.screen ?? NSScreen.mainScreen() { 
     window.setFrame(screen.visibleFrame, display: true) 
    } 
} 

आप आवेदन प्रतिनिधि में डालने के बजाय इस प्रबंधन के लिए एक NSWindowController उपयोग करने पर विचार कर सकते हैं। उस स्थिति में, आप इसे windowDidLoad में डाल सकते हैं। विंडो नियंत्रक ऐपकिट में एक बहुत ही आम उपकरण हैं (नियंत्रण नियंत्रकों के विपरीत, जो ऐतिहासिक रूप से आम नहीं हैं)।

यदि आप वास्तव में ज़ूम व्यवहार चाहते हैं, तो NSWindowDelegate विधि windowWillUseStandardFrame(_:defaultFrame:) के साथ स्वयं को परिचित करें। आपको आम तौर पर लॉन्च पर zoom(_:) पर कॉल नहीं करना चाहिए क्योंकि यह एनिमेट होगा, लेकिन प्रतिनिधि में जो भी तर्क आप करते हैं, उसका उपयोग अपने फ्रेम की गणना करने के लिए किया जाना चाहिए। फिर, मुख्य स्क्रीन की बजाय खिड़की की स्क्रीन पर रहने के लिए अपने फ्रेम को समायोजित करना सुनिश्चित करें।

आदर्श रूप से, आपको वास्तव में अंतिम फ्रेम का सम्मान करना चाहिए जिसे उपयोगकर्ता ने दृश्यमान फ्रेम पर मजबूर करने के बजाय उपयोग किया था। कोको में frameAutosave कहा जाता है यदि आप और अधिक शोध करना चाहते हैं। एक विंडो नियंत्रक आपको कुछ हद तक स्वचालित रूप से प्रबंधित करने में मदद करेगा यदि आप इंटरफ़ेस बिल्डर में एक ऑटोसवे नाम सेट करते हैं। (हालांकि दृश्यमान फ्रेम प्राप्त करने के लिए पहले लॉन्च पर फ्रेम की गणना करने की आवश्यकता से थोड़ा जटिल है, इसलिए यह पूरी तरह से स्वचालित नहीं होगा।)

अपने डिफ़ॉल्ट फ्रेम को किसी भी रूप में दृश्यमान फ्रेम बनाने से पहले कुछ सावधान विचार दें मामला। यह बड़े मॉनीटर पर वास्तव में बहुत बड़ा हो सकता है (वहां अभी भी बहुत सारे 30 "सिनेमा प्रदर्शित हैं, लेकिन 27 पर भी" यह बहुत भारी हो सकता है)। कभी-कभी यह आपके ऐप के आधार पर ठीक है, लेकिन मुझे अक्सर लगता है कि यह अधिकतम प्रारंभिक आकार को परिभाषित करने योग्य है (जबकि उपयोगकर्ता इसे बड़ा करने की अनुमति देता है)।

0

हाय दोस्तों मैं वास्तव में आपकी मदद की सराहना करता हूं।

मैं दस्तावेज़ आधारित मैक एप्लिकेशन पर काम कर रहा हूं। मैंने आपके द्वारा प्रदान किए गए कोड को दस्तावेज़ क्लास के मेकविंडो कंट्रोलर() में रखा है और यह एक आकर्षण की तरह काम करता है।

बहुत बहुत धन्यवाद। मैं जिस कोड का उपयोग करता हूं वह यहां है।

override func makeWindowControllers() { 
     // Returns the Storyboard that contains your Document window. 
     let storyboard = NSStoryboard(name: "Main", bundle: nil) 
     let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController 
     self.addWindowController(windowController) 

     if let screen = NSScreen.mainScreen() { 
      windowController.window?.setFrame(screen.visibleFrame, display: true, animate: true) 
     } 
    } 
संबंधित मुद्दे