隐藏NSWindow的一部分(动画)

时间:2013-05-27 12:01:01

标签: cocoa animation window hide

我有一个简单的任务,动画NSWindow,但仍然找不到完成此任务的方法。

我有一个窗口,我希望通过将其设置为超出屏幕边缘来隐藏它。但是连接了2个显示器后,我的窗口只移动到第二个显示器。

有没有办法对要在主屏幕矩形区域中绘制的窗口进行剪裁?

我在Apple文档中找不到类似内容。我知道一些UI效果是通过制作模拟所需行为的技巧来实现的。任何信息都非常感谢!

我的第一个猜测是创建一个带有辅助屏幕内容快照的新窗口。然后在此快照下滑动我的主窗口。但这是一种糟糕的方式 - 屏幕上的内容可能具有动画效果(如视频)。

1 个答案:

答案 0 :(得分:3)

你将不得不调整它。

显然,调整真实窗口的大小不会起作用 - 你可以将所有视图调整为副作用,并将任何视图调整为零会使它变得疯狂。

所以,你需要执行一些手法:

  1. Take a screenshot of the window.
  2. 创建一个无边框窗口,其框架大小正好是该图像的大小。 (不要使用真实窗口的框架 - 它不包括阴影。)
  3. 创建一个NSView作为无边框窗口的内容视图。
  4. 创建图像视图并将其放在内容视图中。
  5. 将图像视图的autoresizingMask设置为在视图的同一边缘,与您要为窗口设置动画的屏幕边缘相同。 (例如,如果您要从底部设置窗口的动画,请将底部调整大小。)

    请注意,您希望图像视图的宽度和高度固定 - 不大()。您将更改窗口的大小,但您希望图像视图保持相同的大小(并逐渐消失在窗口边缘)。

  6. 如果您更改了实际窗口的窗口级别,请将无边框窗口的窗口级别设置为匹配。
  7. Disable screen updates.
  8. Order无边框窗口in front of真实窗口。
  9. Order out真正的窗口。
  10. Enable screen updates.
  11. 使用NSViewAnimation或Core Animation为无边框窗口的帧设置动画,将其原点更改为该屏幕边缘的位置,并将相关轴上的帧大小降至零。保持另一个轴不变。例如,如果要设置右边缘的动画,请将x原点更改为屏幕右边缘的x坐标,将宽度更改为零,并保持y原点和高度不变。

    当你在它时,你可能想要将窗口的alphaValue设置为零(NSViewAnimation将其称为“FadeOut”效果)。尝试使用和不使用它,看看你喜欢哪种方式。

  12. 动画完成后,请将无边框窗口排除并将其丢弃。