私はNSWindow
それをすべての前に置きたいと思っています(コンピューターのすべてのアプリ、フルスクリーンアプリなど..)。バックグラウンドアプリをクリックしても、バックグラウンドにNSWindow
移動できません。また、NSWindow
たとえば、ユーザーがデスクトップをdesktop2に切り替えた場合など、ユーザー画面に従う必要があります...どうすればそれを行うことができますか?
ありがとう!
3 に答える
他のアプリのフルスクリーンウィンドウで表示する必要がない場合は、それほど難しくありません。
まず、他のすべての前にとどまるには、setLevel:NSFloatingWindowLevel以上を使用します。さまざまな値を試して、ニーズに適していると思われる値を確認してください。
次に、ユーザーがスペースを変更した場合でも前にとどまるには、おそらくExposé/ Mission Controlを含め、適切なフラグのペアを使用してsetCollectionBehavior:を使用するか、属性インスペクターで対応するスペースとExposéの設定を使用します。ペン先。すべてのスペースに参加できるか、アクティブスペースに移動すると、わずかに異なる方法で、すべてのスペースに表示されたままになります。Exposéを固定、または場合によっては一時的に設定することもできます。繰り返しますが、両方の方法を試してみてください。
ただし、ユーザーが全画面スペースまたはダッシュボードまたはランチパッドに切り替えると、Lionは全スペースウィンドウとアクティブスペースへの移動ウィンドウの両方を非表示にします。そして、見てみると、3つのケースのそれぞれについて異なる方法でこれを行っていることがわかります。そして、そのSnow Leopardは少し違ったやり方をしますし、MountainLionもそうです。
この最後の問題を解決したい場合は、少しハッカーが必要です。また、ケースごと、OSバージョンごとに異なる形式のハッカーが必要です。基本的なトリックは、非表示関連の通知をキャッチし、適切なタイミングで自分自身を再表示することです。
info.plist を変更し、Application is Agent フラグを YES に設定する必要があります。エージェントのウィンドウは、フルスクリーン ウィンドウの前面に表示できます。
info.plistで、「アプリケーションはエージェント(UIElement)」の両方を「YES」に設定
& ウィンドウ レベル:
self.view.window?.level = NSWindow.Level(rawValue: kCGMainMenuWindowLevel.hashValue - 1)
self.view.window?.collectionBehavior = [.stationary, .canJoinAllSpaces, .fullScreenAuxiliary]
助けて頂きました。