前提・実現したいこと
Xcodeを用いてmacOS用のSwiftアプリケーション制作を試みています。
アプリケーションの背景として画像(以下の図では白い画像に置き換えています)を表示しようと思い立ち、
タイトルバーが無い方が雰囲気が良いと考え、初心者ながら調べつつタイトルバーを消すことには成功したものの、
イメージに".scaledToFill()"をつけてリサイズしても、ウィンドウのアスペクト比によってタイトルバーがあった部分まで画像が届かないことがあります。
試したこと
・インターネットをかなり探したつもりですが、タイトルバーを消す方法を紹介している記事自体が数える程しか見つからず、その上でウィンドウをイメージで一杯にする例は見つかりませんでした。
・画像を".resizable()"とした上で、".scaleEffect(2)"で画像のサイズを2倍にするとタイトルバー分まで埋まるようにはなりましたが、ウィンドウのアスペクト比が元の画像に近いのならば出来る限り表示しなければ勿体ないような気もします。それとも諦めるべきでしょうか。
・ウィンドウの縦(タイトルバー含む)と横の長さを取得し、画像のサイズと照らし合わせての計算により".resizable()"と".scaledToFill()"に相当するプログラムを自分で作ることを考えました。こちらもかなり調べましたが、iOSNSRect等々の型変換にギブアップして最初の問題に立ち戻ることを数回繰り返した結果、こうして質問させて頂く流れとなりました。
初心者が滲み出る質問文になったこと申し訳なく思います。何方かご教授頂ければ幸いです。
現在のプログラム
(BackgroundView.swift) アプリケーション内で背景を変更できる機能を後々付けるつもりで、プログラムを分けています
Swift
1struct BackgroundView: View { 2 let number: Int 3 var body: some View { 4 Image("Background_(number)") 5 .resizable() 6 .scaledToFill() 7 } 8}
(ContentView.swift)
Swift
1struct ContentView: View { 2 var body: some View { 3 BackgroundView(number: 4) 4 } 5}
(AppleDelegate.swift) SwiftUIのXcode 11におけるCocoa Classの設定方法が分からず、AppleDelegate.swiftに入れてみると上手く動作したので、これで良いか、と思いプログラムを加えて行った次第です
Swift
1import Cocoa 2import SwiftUI 3 4@NSApplicationMain 5class AppDelegate: NSObject, NSApplicationDelegate { 6 7 var window: NSWindow! 8 9 10 func applicationDidFinishLaunching(_ aNotification: Notification) { 11 // Create the SwiftUI view that provides the window contents. 12 let contentView = ContentView() 13 14 // Create the window and set the content view. 15 window = NSWindow( 16 contentRect: NSRect(x: 0, y: 0, width: 480, height: 300), 17 styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], 18 backing: .buffered, defer: false) 19 window.center() 20 window.setFrameAutosaveName("Main Window") 21 window.contentView = NSHostingView(rootView: contentView) 22 window.makeKeyAndOrderFront(nil) 23 24 //ここから 25 26 window?.titlebarAppearsTransparent = true 27 window?.titleVisibility = .visible 28 window?.styleMask.insert(.fullSizeContentView) 29 // window?.styleMask = .fullSizeContentView 30 window?.isOpaque = false 31 window?.backgroundColor = NSColor(white: 1, alpha: 0) 32 33 //ここまでをデフォルトのコードに加えています 34 } 35 36 func applicationWillTerminate(_ aNotification: Notification) { 37 // Insert code here to tear down your application 38 } 39 40 41}
補足情報(FW/ツールのバージョンなど)
XCodeのバージョンは11.4 (11E146)です。
OSはmacOS Catalina 10.15.3です。
回答1件
あなたの回答
tips
プレビュー