当NSWindow进入全屏(窗口的最小尺寸被动画侵犯)时,视图会损坏

时间:2012-07-20 08:47:36

标签: cocoa core-animation fullscreen nswindow

我的主要NSWindow包含限制在某个大小范围的UI,否则它可能会被破坏。我使用

将窗口限制为大小范围

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

这适用于用户拖动边或大小框。

当用户按下“全屏”按钮时,Lion会启动

动画
  1. 将窗口缩小到当前大小以下
  2. 分几个步骤,增加其大小,直到达到全屏表示大小。
  3. 如果窗口以最小尺寸启动,则此动画会将其缩小到低于定义的最小尺寸,并且会损坏我的UI而无法修复(用户需要重新启动应用程序)。我的观点是接收setFrameSize:大小不受支持。

    我的问题

    • 这可以被视为可可虫吗?
    • 我在视图层次结构中做错了什么?
    • 我可以以某种方式防止损坏,而不用全屏替换OS标准动画吗?
    • 为什么标准动画不是基于窗口内容的“快照”而不是
      整个动画中整个视图层次的实时调整大小?这肯定没有效率。
    • 是否有一种简单的方法可以应用另一种标准转换 对我没有破坏性?
    • 有人可以“备用”几行代码来完成一个简单的线性大小调整动画,但不会低于最低限度吗?

    感谢!

1 个答案:

答案 0 :(得分: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;
}

希望这会对你有帮助!