【问题标题】:NSWindow Animate show / hide titlebarNSWindow Animate 显示/隐藏标题栏
【发布时间】:2015-04-06 22:14:11
【问题描述】:
我可以通过包含以下内容的操作方法以两种方式之一显示和隐藏我的 NSWindows 标题栏:
window.titlebarAppearsTransparent = true
window.movableByWindowBackground = true
或者最好:
window.styleMask = NSBorderlessWindowMask
window.movableByWindowBackground = true
window.canBecomeKeyWindow
我能以任何方式用淡入淡出效果来制作动画吗..?或者这会涉及一个更复杂的方法来显示和隐藏窗口标题栏..?
【问题讨论】:
标签:
macos
cocoa
swift
nswindow
titlebar
【解决方案1】:
好的,我找到了一个解决方案,可以用动画效果显示和隐藏 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
}
所以我们得到了标题栏视图,因为它是标准窗口按钮的父视图。并简单地为标题栏视图的 alpha 值设置动画。
【解决方案2】:
只是为了确认在 Objective-C 中这可以解决问题:
[[[_window standardWindowButton:NSWindowCloseButton] animator] setAlphaValue:0];
[[[_window standardWindowButton:NSWindowMiniaturizeButton] animator] setAlphaValue:0];
[[[_window standardWindowButton:NSWindowZoomButton] animator] setAlphaValue:0];
【解决方案3】:
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
}
}