【问题标题】:I want to animate the movement of a foreign OS X app's window我想为外国 OS X 应用程序窗口的移动制作动画
【发布时间】:2011-02-07 22:50:26
【问题描述】:

背景:我最近有两台显示器,想要一种将焦点窗口移动到另一个屏幕的方法,反之亦然。我通过使用 Accessibility API 实现了这一点。 (具体来说,我得到一个 AXUIElementRef 来保存与焦点窗口关联的 AXUIElement,然后我设置 NSAccessibilityPositionAttribute 值来移动窗口。

我的工作方式几乎与我想要的完全一样,除了我想为窗口的移动设置动画。我想如果我能以某种方式获得 NSWindow,我就能获得它的图层并使用 CoreAnimation 来为窗口移动设置动画。

不幸的是,我发现这是不可能的。 (纠正我我错了——如果有办法做到这一点,那就太好了!)所以我向你们所有人寻求帮助。如果我可以访问 AXUIElementRef,我应该如何为焦点窗口的移动设置动画?

-R

--编辑

我能够通过创建一个while循环并每次将窗口的位置移动少量以制作成功的动画来获得粗略的动画。然而,结果相当低于标准。您可以猜到,它需要大量不必要的处理能力,而且仍然非常不稳定。 必须有更好的方法。

【问题讨论】:

    标签: objective-c cocoa animation accessibility


    【解决方案1】:

    我能想象的最好的方法是在窗口的 AXUIElement 信息值和从 CGWindow api 返回的信息之间执行一些 hacky 属性比较。一旦您能够确定 CGWindow API 中的哪些窗口与 AXUIElementRefs 匹配,您就可以获取当前窗口内容的位图,用您自己的自定义动画绘制的人造窗口覆盖屏幕,然后在放下覆盖时设置真正的 AXUIElementRef到期望的动画结束位置。

    哈克,虽然。

    【讨论】:

    • 这也是我能想到的最好的。我将尝试这样做,看看与仅以迭代方式一点一点移动窗口的位置相比,是否有任何明显的性能提升。
    猜你喜欢
    • 2016-10-10
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多