0

我的主 NSWindow 包含限制在某个大小范围内的 UI,否则它可能会损坏。我将窗口限制在一个大小范围内

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

这适用于用户拖动边缘或尺寸框。

当用户按下“全屏”按钮时,Lion 会启动一个动画,该动画将

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

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

我的问题

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

谢谢。!

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 回答