核心动画,斯威夫特:如何为NSWindow制作动画

时间:2015-12-08 15:27:15

标签: swift core-animation nswindow

我正试图用Swift增加NSWindow的大小。 (MAC)

现在,我能够在没有动画的情况下做到这一点,但我不知道如何用动画做到这一点。

一个。我会对代码感兴趣。

B中。如果有教程或书籍,可以删除链接。

2 个答案:

答案 0 :(得分:3)

以下代码将窗口高度增加50像素,并将y原点减少相同的量。这会将窗口放大到屏幕底部。

var windowFrame = self.view.window?.frame
let oldX = windowFrame?.origin.x
let oldY = windowFrame?.origin.y
let oldWidth = windowFrame?.size.width
let oldHeight = windowFrame?.size.height
let toAdd = CGFloat(50.0)
let newY = oldY! - toAdd
let newHeight = oldHeight! + toAdd
windowFrame? = NSMakeRect(oldX!, newY, oldWidth!, newHeight)
self.view.window?.animator().setFrame(windowFrame!, display: true, animate: true)

你必须调用窗口的动画师才能获得动画(潜在的错误?)。这不会产生动画:

self.view.window?.animator().setFrame(windowFrame!, display: true, animate: true)

答案 1 :(得分:0)

您是否在NSWindow上尝试过动画制作代理?这是我要尝试的第一件事。不知道如何做得很好,但如果你的窗户不是很复杂,它可能适合你的需要。这是使用动画师代理淡化窗口的some Objective-C sample code (gist),但您可以根据帧大小调整它。将它转换为Swift应该非常简单。

对类似问题的回复Why is [[NSWindow animator] setFrame...] very laggy sometimes?建议使用名为JNWAnimatableWindow的库。它使用Core Animation。它是用Objective-C编写的,但是,您可以使用桥接头将它带入Swift项目。