🦋
SwiftUI: MenuBarExtraの仕様
MenuBarExtraでRunCatを実装することができるのか知るために仕様を調査する。
-
MenuBarExtraの中ではAppKitのViewは表示できない(NSViewRepresentableが無効) -
MenuBarExtraの中ではアニメーションは不可能(ProgressViewやTimelineViewなど動的に変化するものが表示されない) -
MenuBarExtraのlabelにはLabelやText、Imageが表示可能- ただし、
.tint()や.foregroundColor()で色を変更することは不可能 -
.background()は通用しない -
GeometryReaderを利用しても座標はおろかサイズすら入手不可能
- ただし、
-
MenuBarExtraに指定するlabelのImage(name:)を動的に変更することでキーフレームアニメーションをすることは可能- ただし、画像を変えるスピードに比例してCPU使用率が上がっていく(1秒間に5フレームでも7%ほどでひどい)
-
MenuBarExtraに指定するlabelの画像をTemplateにしている場合は強制的にアルファを反映したモノクロ表示になり、Originalにしている場合はオリジナルの画像の色のまま表示される(NSStatusBarButtonの時と違ってNSView.draw()しなくても色褪せたりしない) -
MenuBarExtraのアイコンは.environment(\.displayScale, 2.0)を指定しないと解像度が悪くなってしまう -
MenuBarExtraのcontentにButtonやMenuをVStackで入れることでよくあるメニューを実装することが可能- Separatorを入れたいときは
Divider()を使えばいい
- Separatorを入れたいときは
-
.menuBarExtraStyle(.window)を付与することで、メニューアイコンの下にウインドウ領域を展開できる- このウインドウ領域の中では
ProgressViewのアニメーションは有効で、NSViewRepresentableも機能する
- このウインドウ領域の中では
Discussion