如何动画显示为 sheet 的 NSViewController 的大小变化?

How to animate the size change of an NSViewController presented as a sheet?

在Xcode中,如果您尝试创建一个新文件,它会询问您将它保存在哪里。您可以按此按钮展开显示的 sheet:

我正在尝试创建类似于该按钮的东西,它将放大 NSViewController 并显示 Sheet segue。请注意,我并不是要创建我自己的 NSSavePanel 版本。我只是想以此为例来说明我要创建的按钮的行为。

我知道我可以将 preferredContentSize 设置为更大的值以放大 sheet:

preferredContentSize = CGSize(width: 300, height: 300)

但这会立即改变大小,这与保存文件对话框中的按钮不同,它显示 sheet 放大的动画。

我试着把它放在动画块中:

NSAnimationContext.runAnimationGroup { (context) in
    context.duration = 1
    preferredContentSize = CGSize(width: 300, height: 300)
}

但同样的事情发生了。

我很确定 NSViewController 中应该有一个方法,或者我找不到的类似方法...

NSWindow 有一个方法可以做到这一点:

self.view.window?.setFrame(NSRect(x: 0, y: 0, width: 100, height: 100), display: true, animate: true)