2015-12-16 21 views

cevap

5

Sen "uzaklaştırma" olabilir hedef çerçeve olarak NSScreen en visibleFrame kullanarak maksimum kullanılabilir alan bir pencere. Örneğin

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

, AppDelegate.swift içinde: en window söyleyin NSWindow IBOutlet olduğunu Let

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

Üzgünüm, mac dünyasında çok yeniyim. Ben sadece bu kodu NSViewController: viewDidLoad 'a koydum ve çalışmıyor, bu kodu tam olarak nereye koyacağımı söyleyebilirsiniz.Bu benim kodum = ekran görüntüsü = NSScreen.mainScreen() { self.view.window? .setFrame (screen.visibleFrame, görüntü: true, animate: true) } –

+0

Yanıtımı bir örnekle güncelleştirdim. – Moritz

+1

Hızlı Güncelleme 3: '.mainScreen()' i '.main()' ile değiştirin. – Moritz

6

yakınlaştırılmış haliyle bir uygulama ile aynı şey değil "maksimize". Yeşil artı simgesi yakınlaştırmayı gösterir, yani "bu içerik için uygun boyut" anlamına gelir. Bazı uygulamalarda görünen çerçeve (Eric D.'nin tartıştığı gibi), ama neredeyse her şey olabilir. Örneğin bir Safari penceresini yakınlaştırmayı deneyin.

Gerçekten, daha sonra Eric doğru yolda "maksimize" değil "zoom" istiyorum varsayarsak, ama daha iyi yapılabilir. Öncelikle, pencerenin ekranını bir tane varsa kullanmalısınız. Ayrıca, başlatma sırasında pencereyi yeniden boyutlandırmamalısınız (lansman sırasında bu durum garip görünebilir).

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

Sen uygulama temsilci koyarak yerine bu yönetmek için bir NSWindowController kullanarak düşünebilirsiniz. Bu durumda, bunu windowDidLoad'a ekleyebilirsiniz. Pencere denetleyicileri, AppKit'te oldukça yaygın bir araçtır (tarihsel olarak yaygın olmayan denetleyicileri görüntülemek yerine). Aslında, davranış Büyütmek NSWindowDelegate yöntemle windowWillUseStandardFrame(_:defaultFrame:) yakından tanımak istiyorsanız

. Genel olarak zoom(_:)'u doğrudan başlatmaya çağırmamalısınız, çünkü bu animasyon canlandıracak, ancak delegede yaptığınız mantık, çerçevenizi hesaplamak için kullanılmalıdır. Yine, çerçevenizi ana ekran yerine bir tane varsa pencerenin ekranında yaşamak için ayarladığınızdan emin olun.

İdeali, gerçekten kullanıcı görünür çerçeveye onu zorlamak yerine kullanılan son kareyi onurlandıran edilmelidir. Daha fazla araştırmak istiyorsanız, buna Cocoa'da frameAutosave denir. Bir pencere denetleyicisi, Arayüz Oluşturucu'da bir otomatik kaydetme adı ayarladıysanız bunu otomatik olarak yönetmenize yardımcı olacaktır. (Görünür çerçeveyi elde etmek için ilk başlatımda kareyi hesaplamaya gereksinim duymak biraz karmaşık olsa da, tamamen otomatik olmayacaktır.)

Varsayılan çerçevenizi görünür çerçeve haline getirmeden önce dikkatli bir şekilde düşünün. vaka. Bu, büyük monitörlerde gerçekten çok büyük olabilir (orada hala 30 tane "Sinema gösterileri var, ama 27'de bile" oldukça bunaltıcı olabilir). Bazen uygulamanıza bağlı olarak iyi olur, ancak sık sık başlangıç ​​boyutunun belirlenmesini (kullanıcının daha büyük yapmasına izin verirken) belirlemeyi tercih ederim.

0

Merhaba Guys Yardımın için minnettarım.

Belge tabanlı bir mac uygulaması üzerinde çalışıyorum. Belge sınıfının makeWindowControllers() 'ında sağladığınız kodu koydum ve bir çekicilik gibi çalışıyor.

Çok teşekkür ederim. İşte kullandığım kod.

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) 
     } 
    } 
İlgili konular