2015-12-16 19 views

答えて

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、animate:true) } –

+0

私の答えを更新しました。 – Moritz

+1

Swift 3のアップデート: '.mainScreen()'を '.main()'に置き換えてください。 – Moritz

6

そのズーム状態でアプリが同じものではありません「最大化」。緑色のプラスアイコンはズームを示します。これは「このコンテンツに適したサイズ」を意味します。いくつかのアプリケーションでは、目に見えるフレームです(Eric D.が論じているように)が、ほとんど何でもかまいません。たとえば、Safariウィンドウをズームしてみてください。

実際に "最大化"して "ズーム"しないと仮定すると、エリックは正しい軌道に乗っていますが、より良い結果が得られます。まず、ウィンドウの画面があればそれを使うべきです。また、起動時にウィンドウのサイズ変更をアニメートしないでください(起動時に見苦しくなる可能性があるため)。

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

あなたは、アプリケーションデリゲートでそれを置くのではなく、これを管理するためにNSWindowControllerを使用して検討する必要があります。その場合は、windowDidLoadに入力してください。ウィンドウコントローラはAppKitではかなり一般的なツールです(歴史的には共通ではないビューコントローラとは対照的です)。

実際にズームの動作が必要な場合は、NSWindowDelegateメソッドwindowWillUseStandardFrame(_:defaultFrame:)に慣れてください。一般的にzoom(_:)は起動時に直接呼び出すべきではありません。なぜなら、それはアニメーション化されるためですが、デリゲート内でどのようなロジックを使用してフレームを計算するのかを決める必要があります。メイン画面ではなくウィンドウがある場合は、ウィンドウの画面に表示されるようにフレームを調整してください。

理想的には、ユーザーが表示されたフレームに強制するのではなく、使用した最後のフレームを賞賛する必要があります。それ以上のことを研究したいのであれば、ココアのframeAutosaveと呼ばれています。 Interface Builderでオートセーブ名を設定するだけで、ウィンドウコントローラが多少自動的にそれを管理するのに役立ちます。 (目に見えるフレームを取得するために最初の起動時にフレームを計算する必要があるため、少し複雑ですが、完全には自動ではありません)。

デフォルトフレームを任意の場合。それは大型モニターでは本当に巨大なことがあります(まだ30インチの映画館がたくさんありますが、27インチでさえかなり圧倒的です)。アプリによってはうまくいくこともありますが、ユーザーがそれを大きくできるようにしながら、最大初期サイズを定義する価値があることがよくあります。

0

こんにちは皆さん、本当にありがとうございます。

私はドキュメントベースのMacアプリケーションで作業しています。私はあなたが提供したコードをDocumentクラスのmakeWindowControllers()に入れ、それは魅力的に機能します。

ありがとうございました。ここで私が使用するコードです。

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) 
     } 
    } 
関連する問題