NSWindow动画显示/隐藏标题栏
问题描述:
我通过包含一个操作方法是能够显示和隐藏两种方式之一我NSWindows标题栏:NSWindow动画显示/隐藏标题栏
window.titlebarAppearsTransparent = true
window.movableByWindowBackground = true
或较好的是:
window.styleMask = NSBorderlessWindowMask
window.movableByWindowBackground = true
window.canBecomeKeyWindow
难道我能以任何方式用淡入淡出效果来制作动画..?或者,这会涉及一个更加复杂的显示和隐藏Windows标题栏的方法..?
答
好吧我已经找到了解决方案,显示和隐藏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值。
答
只是为了确认在Objective-C这样做的伎俩:
[[[_window standardWindowButton:NSWindowCloseButton] animator] setAlphaValue:0];
[[[_window standardWindowButton:NSWindowMiniaturizeButton] animator] setAlphaValue:0];
[[[_window standardWindowButton:NSWindowZoomButton] animator] setAlphaValue:0];
答
加里·辛普森的回答重构。
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
}
}