我在 macOS 上使用 swift 4,我想隐藏一个带有动画的堆栈视图项。
我试过这个:
class ViewController: NSViewController {
@IBOutlet weak var box: NSBox!
@IBOutlet weak var stack: NSStackView!
var x = 0
@IBAction func action(_ sender: Any) {
if x == 0 {
NSAnimationContext.runAnimationGroup({context in
context.duration = 0.25
context.allowsImplicitAnimation = true
self.stack.arrangedSubviews.last!.isHidden = true
self.view.layoutSubtreeIfNeeded()
x = 1
}, completionHandler: nil)
} else {
NSAnimationContext.runAnimationGroup({context in
context.duration = 0.25
context.allowsImplicitAnimation = true
self.stack.arrangedSubviews.last!.isHidden = false
self.view.layoutSubtreeIfNeeded()
x = 0
}, completionHandler: nil)
}
}
}
结果将是:
有用!但我对动画风格不满意。我的愿望是:
- 我按下按钮,红色视图将在右侧变小
- 我按下按钮,左侧的红色视图会变大。
就像一个侧边栏,或者如果你有一个 splitview 控制器,你会做splitviewItem.animator().isCollapsed = true
这个显示/隐藏动画是完美的。这个愿望可能吗?
更新
self.stack.arrangedSubviews.last!.animator().frame = NSZeroRect
更新 2
self.stack.arrangedSubviews.last!.animator().frame = NSRect(x: self.stack.arrangedSubviews.last!.frame.origin.x, y: self.stack.arrangedSubviews.last!.frame.origin.y, width: 0, height: self.stack.arrangedSubviews.last!.frame.size.height)