0

メインの NSWindow には、あるサイズ範囲に制限された UI が含まれています。そうしないと、破損する可能性があります。を使用してウィンドウをサイズ範囲に制限します

[myWindow setContentsMaxSize:maxSize] [myWindow setContentsMinSize:minSize]

これは、ユーザーがエッジまたはサイズボックスをドラッグする場合にうまく機能します。

ユーザーが「フルスクリーン」ボタンを押すと、Lion はアニメーションを開始します。

  1. ウィンドウを現在のサイズより小さくし、
  2. いくつかのステップで、全画面表示サイズに達するまでサイズを大きくします。

ウィンドウが最小サイズで開始された場合、このアニメーションは定義された最小サイズよりも小さくなり、修復できないほど UI が破損します (ユーザーはアプリを再起動する必要があります)。ビューがサポートされていないサイズの setFrameSize: を受け取ります。

私の質問

  • これは Cocoa のバグと見なすことができますか?
  • ビュー階層で何か間違ったことをしていますか?
  • フルスクリーンのOS標準アニメーションを置き換えずに、どうにかして破損を防ぐことはできますか?

  • アニメーション全体でビュー階層全体をライブでサイズ変更するのではなく、ウィンドウ コンテンツの「スナップショット」に基づいた標準アニメーションを使用しないのはなぜですか? これは確かに効率的ではありません。
  • 私にとって非破壊的な別の標準遷移を適用する簡単な方法はありますか?
  • 誰かが、最小値を下回らない単純な線形サイズ変更アニメーションを実行する数行のコードを「割く」ことができますか?

ありがとう。!

4

1 に答える 1

0

フルスクリーン アニメーションの動作についても調査しました。そのしくみを次に示します。

また、ウィンドウのコンテンツのスナップショットを取得することに基づいていますが、いくつかの改良が加えられています。いくつかのコントロール ポイント (512、1024、2048 など) でいくつかのスナップショットを取得します。
私の場合、フルスクリーン 2560x1440 に入ると、400 ピクセル幅のウィンドウが 512 ピクセルのスナップショットを取り、次に 1024 ピクセル、次に 2560 幅のスナップショットを取りました。すべてのケースでこの動作がデフォルトかどうかはわかりませんが、これは私自身の調査の結果です。

最小/最大ウィンドウ サイズの設定に関する問題:
Interface Builder で設定された最小ウィンドウ サイズは機能しますが、最大制約は機能しません。私は現在それに取り組んでおり、この文書化された方法はあなたのために働くはずです:

このコードをウィンドウ デリゲートに配置します。

static const NSSize kWindowMinSize = {100, 100};
static const NSSize kWindowMaxSize = {100500, 100500};

...

- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
{
    frameSize.width = MAX(kWindowMinSize.width, MIN(kWindowMaxSize.width, frameSize.width));
    frameSize.height = MAX(kWindowMinSize.height, MIN(kWindowMaxSize.height, frameSize.height));
    return frameSize;
}

これがあなたを助けることを願っています!

于 2012-08-24T10:05:34.660 に答える