NSWindow Animate显示/隐藏标题栏

时间:2015-02-06 17:26:37

标签: macos cocoa swift nswindow titlebar

我可以通过包含以下内容的操作方法以两种方式之一显示和隐藏我的NSWindows标题栏:

window.titlebarAppearsTransparent = true
window.movableByWindowBackground  = true

或者最好:

window.styleMask = NSBorderlessWindowMask
window.movableByWindowBackground  = true
window.canBecomeKeyWindow

我是否能够以任何方式使用淡入淡出效果进行动画制作..?或者这会涉及一种更复杂的显示和隐藏窗口标题栏的方法..?

3 个答案:

答案 0 :(得分:6)

好的,我找到了一个显示和隐藏带有动画效果的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
    }

所以我们得到标题栏视图的事实是它是standardWindowButtons的超级视图。并简单地设置标题栏视图的alpha值的动画。

答案 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? {
    //http://stackoverflow.com/a/28381918
    return standardWindowButton(NSWindowButton.ZoomButton)?.superview
}

}

答案 2 :(得分:0)

只是为了确认在Objective-C中这可以解决问题:

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