SwiftUI로 MacOS 메뉴 바 애플리케이션을 손쉽게 개발
메뉴 바 응용 프로그램을 설치하면 상단 시스템 바에 응용 프로그램이 표시되고 사용자는 이 아이콘을 클릭하여 응용 프로그램의 팝오버 보기에 빠르게 액세스할 수 있습니다.
앱 검토를 기다리는 동안 시스템 바에서 작업 목록을 관리할 수 있는 작은 TODO 응용 프로그램을 최근 개발했습니다. 소스 코드를 다운로드하여 작동 방식을 확인할 수 있습니다.
htps : // 기주 b. 코 m / msz 참새 c / 메누바 r
htps : // 아 ps. 아 ぇ. 이 m/jp/아니 p/메누바 r도/이 d1550343840? mt=12
MacOS 애플리케이션 만들기
먼저 SwiftUI를 활성화한 빈 MacOS 응용 프로그램을 만듭니다. 응용 프로그램 유형으로
AppKit App Delegate
를 선택했는지 확인하십시오.AppDelegate.swift 파일 설정
메뉴 바 항목과 팝오버 창을 이 파일에서 설정해야 합니다. 이 기사에서는
ContentView()
를 팝업 창으로 사용합니다.응용 프로그램에서 일반 인터페이스를 사용하려면 팝업 창 전용의 개별 SwiftUI 뷰를 만들어야 합니다.
변수 설정
다음 변수를
AppDelegate.swift
파일에 추가:var statusBarItem: NSStatusItem!
var popover: NSPopover!
상태 표시줄의 항목 초기화
statusBarItem
는 시스템 메뉴 표시줄에 표시되는 항목입니다. 이 오브젝트를 이미지(또는 시스템 이미지)로 초기화해야 합니다.self.statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.variableLength))
guard let button = self.statusBarItem.button else { return }
button.image = NSImage(systemSymbolName: "checkmark.circle.fill", accessibilityDescription: nil)
button.action = #selector(showHidePopover(_:))
이 기사의 다음 부분에서
showHidePopover
함수를 정의합니다.팝오버 초기화
이제 팝오버 창을 초기화하여 해당 창의 내용이 되는 SwiftUI의 뷰를 설정해야 합니다.
let popover = NSPopover()
popover.contentSize = NSSize(width: 350, height: 500)
popover.behavior = .transient
let contentView = ContentView().environment(\.managedObjectContext, persistenceController.storageContext)
popover.contentViewController = NSHostingController(rootView: contentView)
self.popover = popover
사용자가 메뉴 항목을 클릭할 때 팝오버 표시 또는 숨기기
또한 팝오버를 표시하거나 숨기는 기능
showHidePopover
도 정의해야 합니다.@objc func showHidePopover(_ sender: AnyObject?) {
guard let button = self.statusBarItem.button else { return }
if self.popover.isShown {
self.popover.performClose(sender)
} else {
self.popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
self.popover.contentViewController?.view.window?.becomeKey()
}
}
프로그램 실행
이제 프로그램을 실행할 수 있습니다. 시스템 메뉴 표시줄에 새 메뉴 항목이 표시되어야 합니다.
시스템 메뉴 모음에만 표시되는 응용 프로그램 만들기
Xcode에서 프로젝트를 만들면 Xcode는 SwiftUI 뷰를 창에 표시합니다.
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
let contentView = ContentView()
// Create the window and set the content view.
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
window.isReleasedWhenClosed = false
window.center()
window.setFrameAutosaveName("Main Window")
window.contentView = NSHostingView(rootView: contentView)
window.makeKeyAndOrderFront(nil)
}
변수를 삭제하고, 할 수 있습니다.
func applicationDidFinishLaunching(_ aNotification: Notification) {
let contentView = ContentView()
// ...
}
또한 시스템에서 응용 프로그램 창을 표시하지 않으려면
window
파일의 applicationDidFinishLaunching
를 Info.plist
로 설정해야 합니다.그런데 응용 프로그램은 시스템 메뉴 막대에만 표시되며 응용 프로그램 창은 표시되지 않습니다.
Github의 이 데모 프로젝트를 참조하세요. 위의 코드가 포함되어 있습니다.
htps : // 기주 b. 코 m / msz 참새 c / 메누바 r
트위터 @MszPro
내 게시된 Qiita 기사 목록을 카테고리별로 확인할 수 있습니다.
Reference
이 문제에 관하여(SwiftUI로 MacOS 메뉴 바 애플리케이션을 손쉽게 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MaShunzhe/items/4c1c7ec79b83eee5df9b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)