2

NSWindow をアニメーション化する簡単なタスクがありますが、これを達成する方法が見つかりません。

画面の端を超えてアニメーション化して非表示にしたいウィンドウがあります。しかし、2 つのディスプレイが接続されていると、私のウィンドウは単純に 2 番目のモニターに移動します。

メイン画面の四角形領域のみにウィンドウを描画するためのクリッピングを作成する方法はありますか?

Appleのドキュメントにはそのようなものは見つかりませんでした。また、目的の動作をシミュレートするためのトリックを作成することで、いくつかの UI 効果が得られることも知っています。どんな情報でも大歓迎です!

私の最初の推測は、セカンダリ画面コンテンツのスナップショットを含む新しいウィンドウを作成することでした。次に、メイン ウィンドウをこのスナップショットの下にスライドさせます。しかし、これは悪い方法です。画面上のコンテンツが (ビデオのように) アニメーション化される可能性があります。

4

1 に答える 1

4

サイズを変更する必要があります。

明らかに、実際のウィンドウのサイズを変更してもうまくいきません。副作用としてすべてのビューのサイズを変更することになります。

したがって、手先の早業を実行する必要があります。

  1. ウィンドウのスクリーンショットを撮ります。
  2. フレーム サイズがその画像のサイズとまったく同じ枠なしウィンドウを作成します。(実際のウィンドウのフレームは使用しないでください。影が含まれません。)
  3. ボーダレス ウィンドウのコンテンツ ビューとなる NSView を作成します。
  4. 画像ビューを作成し、コンテンツ ビューに配置します。
  5. 画像ビューautoresizingMaskを、ウィンドウをアニメーション化する画面の端と同じビューの端でサイズ変更できるように設定します。(たとえば、ウィンドウの下部をアニメートする場合は、下部を大きくします。)

    イメージ ビューの幅と高さを固定する必要があることに注意してください。ウィンドウのサイズを変更しますが、イメージ ビューは同じサイズのままにしておきます (ウィンドウの端の下に徐々に消えていきます)。

  6. 実際のウィンドウのウィンドウ レベルを変更した場合は、縁なしウィンドウのウィンドウ レベルを一致するように設定します。
  7. 画面更新を無効にします。
  8. 実際のウィンドウの前にフチなしウィンドウを注文します。
  9. 本物の窓から注文してください。
  10. 画面更新を有効にします。
  11. NSViewAnimation または Core Animation のいずれかを使用して、ボーダレス ウィンドウのフレームをアニメーション化し、原点をその画面の端の位置に変更し、関連する軸のフレーム サイズをゼロにします。もう一方の軸はそのままにしておきます。たとえば、右端からアニメートする場合は、x 原点を画面の右端の x 座標に変更し、幅を 0 に変更し、y 原点と高さはそのままにします。

    作業中に、ウィンドウをゼロまでアニメートしたい場合がありalphaValueます (NSViewAnimation ではこれを「フェードアウト」効果と呼んでいます)。これを付けたり付けたりせずに試してみて、どちらが好みかを確認してください。

  12. アニメーションが完成したら、フチなしウィンドウを注文して捨てます。
于 2013-05-28T00:31:36.003 に答える