NSWindow动画显示/隐藏标题栏

5

我可以通过一个包含以下内容的操作方法来显示或隐藏我的NSWindows标题栏中的内容:

window.titlebarAppearsTransparent = true
window.movableByWindowBackground  = true

或者更好的选择是:
window.styleMask = NSBorderlessWindowMask
window.movableByWindowBackground  = true
window.canBecomeKeyWindow

我能以任何方式使用淡入淡出效果来制作动画吗?还是这需要一种更加复杂的方法来显示和隐藏窗口标题栏..?

3个回答

8

好的,我已经找到了一个解决方案,可以使用动画效果显示和隐藏NSWindow标题栏。

您可以在任何方法中实现此功能,我将标题栏淡出到文本更改事件方法,并在任何移动时淡入。

淡出标题栏:

    if window.standardWindowButton(NSWindowButton.ZoomButton)?.superview?.alphaValue > 0.1 {
        window.standardWindowButton(NSWindowButton.ZoomButton)?.superview?.animator().alphaValue = 0
    }

在标题栏中淡入:
    if window.standardWindowButton(NSWindowButton.ZoomButton)?.superview?.alphaValue < 1 {
        window.standardWindowButton(NSWindowButton.ZoomButton)?.superview?.animator().alphaValue = 1
    }

因为标准窗口按钮的父视图是标题栏视图,所以我们通过此方式获取标题栏视图。然后只需动画化标题栏视图的透明度值即可。


1
Gary Simpson的回答已经重构。
extension NSWindow {

    func setTitleBarHidden(hidden: Bool, animated: Bool = true) {

    let buttonSuperView = standardWindowButtonSuperView()
    if buttonSuperView == nil {
        return
    }
    let view = buttonSuperView!
    if hidden {
        if view.alphaValue > 0.1 {
            if !animated {
                view.alphaValue = 0
                return
            }
            view.animator().alphaValue = 0
        }
        return
    }
    if view.alphaValue < 1 {
        if !animated {
            view.alphaValue = 1
            return
        }
        view.animator().alphaValue = 1
    }
}

func standardWindowButtonSuperView() -> NSView? {
    //https://dev59.com/3Ifca4cB1Zd3GeqPlJ_8#28381918
    return standardWindowButton(NSWindowButton.ZoomButton)?.superview
}

}

0

只是确认一下,在Objective-C中这样做就可以了:

[[[_window standardWindowButton:NSWindowCloseButton] animator] setAlphaValue:0];
[[[_window standardWindowButton:NSWindowMiniaturizeButton] animator] setAlphaValue:0];
[[[_window standardWindowButton:NSWindowZoomButton] animator] setAlphaValue:0];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接