使用文档NSAnimationContext.runAnimationGroup(_:_:)
中演示的NSAnimationContext
动画帧原点和大小对于某些视图类型(包括NSImageView
)按预期工作。但是,除非我在动画之后NSButton
添加明确的帧大小更改,否则它不会按预期工作
动画帧大小NSImageView
对于 NSImageView,以下内容按预期工作。它被移动到原点,并调整为 200x200:
NSAnimationContext.runAnimationGroup({(let context) -> Void in
context.duration = 2.0
// Get the animator for an NSImageView
let a = self.theImage.animator()
// Move and resize the NSImageView
a.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
}) {
print("Animation done")
}
动画帧大小NSButton
使用 NSButton 执行相同操作时,按钮将移动但不会调整大小:
NSAnimationContext.runAnimationGroup({(let context) -> Void in
context.duration = 2.0
// Get the animator for an NSButton
let a = self.button.animator()
// Move and resize the NSImageView
a.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
}) {
print("Animation done")
}
但是,如果我将以下代码行添加到最后,在所有动画代码之后,它可以按预期工作!
self.button.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
最终的工作清单NSButton
是:
NSAnimationContext.runAnimationGroup({(let context) -> Void in
context.duration = 2.0
// Get the animator for an NSButton
let a = self.button.animator()
// Move and resize the NSImageView
a.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
}) {
print("Animation done")
}
self.button.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
我不是在这里寻找礼物马,但我不明白为什么 NSButton 需要这样做,甚至是什么使它起作用。谁能解释为什么在动画代码使动画工作NSButton
之后显式设置帧?