gpt4 book ai didi

cocoa - 隐藏 NSWindow 的一部分(动画)

转载 作者:行者123 更新时间:2023-12-03 16:57:55 24 4
gpt4 key购买 nike

我有一个简单的任务,需要对 NSWindow 进行动画处理,但仍然找不到完成此任务的方法。

我有一个窗口,我想通过将其动画设置到屏幕边缘之外来隐藏它。但连接了 2 个显示器后,我的窗口只需移动到第二个显示器即可。

有没有办法对窗口进行一些裁剪,使其仅在主屏幕矩形区域中绘制?

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

我的第一个猜测是创建一个带有辅助屏幕内容快照的新窗口。然后将我的主窗口滑动到此快照下方。但这是一个坏方法 - 屏幕上的内容可能会动画(如视频)。

最佳答案

您必须调整它的大小。

显然,调整真实窗口的大小是行不通的——您会调整所有 View 的大小,这是副作用,并且将任何 View 的大小调整为零往往会使其变得疯狂。

所以,你需要施展一些技巧:

  1. Take a screenshot of the window.
  2. 创建一个无边框窗口,其框架大小与该图像的大小完全相同。 (不要使用真实窗口的框架 - 它不会包含阴影。)
  3. 创建一个 NSView 作为无边框窗口的内容 View 。
  4. 创建 ImageView 并将其放入内容 View 中。
  5. 将 ImageView 的 autoresizingMask 设置为与要通过动画显示窗口的屏幕边缘相同的 View 边缘来调整大小。 (例如,如果您要为窗口设置离开底部的动画,请调整底部的大小。)

    请注意,您希望 ImageView 的宽度和高度是固定的 -不可调整大小。您将更改窗口的大小,但希望 ImageView 保持相同的大小(并逐渐消失在窗口边缘下方)。

  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. 动画完成后,将无边框窗口移出并扔掉。

关于cocoa - 隐藏 NSWindow 的一部分(动画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16772774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com