2012-07-20 58 views
0

我的主要NSWindow包含的UI仅限于某些大小范围,否则可能会损坏。我限制窗口使用当NSWindow进入全屏模式(窗口的最小尺寸被动画侵犯)时,视图会被破坏

的尺寸范围[mywindow的setContentsMaxSize:MAXSIZE] [mywindow的setContentsMinSize:minSize属性]

也能正常工作的边缘或尺寸框的用户拖动。

当用户按下“全屏”按钮,狮子启动的动画将

  1. 收缩低于其当前大小的窗口中,在几个步骤
  2. ,增加其大小,直到它到达全屏表示大小。

如果窗口在其最小尺寸开始,该动画将缩小它下面定义的最小尺寸,并且会破坏我的UI,无法修复(用户需要重新启动应用程序)。我的视图正在接收setFrameSize:不受支持的大小。

我的问题

  • 这可以被认为是一个错误可可?
  • 我在视图层次结构中做错了什么?
  • 我可以以某种方式防止腐败,而不用全屏替换OS标准动画?
  • 为什么标准动画不是基于窗口内容的“快照”,而是在整个动画中对整个视图层次进行实时大小调整而不是
    ?这当然没有效率。
  • 是否有一个简单的方法来应用另一个标准转换,将 对我来说是非破坏性的?
  • 有人可以“备用”几行代码,它会做一个简单的线性调整大小动画,不会低于最小值?

谢谢。

回答

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; 
} 

希望这会帮助你!

相关问题