2015-02-06 181 views
3

我通过包含一个操作方法是能够显示和隐藏两种方式之一我NSWindows标题栏:NSWindow动画显示/隐藏标题栏

window.titlebarAppearsTransparent = true 
window.movableByWindowBackground = true 

或较好的是:

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

难道我能以任何方式用淡入淡出效果来制作动画..?或者,这会涉及一个更加复杂的显示和隐藏Windows标题栏的方法..?

回答

5

好吧我已经找到了解决方案,显示和隐藏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值。

0

只是为了确认在Objective-C这样做的伎俩:

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

加里·辛普森的回答重构。

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 
} 

}