【问题标题】:What's the best approach to animate frame changes on NSView?在 NSView 上动画帧更改的最佳方法是什么?
【发布时间】:2017-02-13 03:44:57
【问题描述】:

理想情况下,我需要UIView.animateWithDuration 之类的东西,但我知道这不是 macOS 上可用的 API。操作 NSView 的实际框架并为更改设置动画的最佳方式是什么?

我尝试使用 CABasicAnimation,但这是在 CALayer 上执行的,而不是视图本身。

我需要的是为实际的视图框架设置动画......(或者这可能是一种不好的做法,还有其他选择吗?)

因此,经过一番挖掘,我找到了NSAnimationContext。然而,这似乎只是在两种状态之间插入/淡化,这不是我想要的感觉。

这是我拥有的代码的一小部分示例:

override func mouseDown(with event: NSEvent) {

    let newSize = NSMakeRect(self.frame.origin.x,
                             self.frame.origin.y - 100,
                             self.frame.width, self.frame.height + 100)

    NSAnimationContext.runAnimationGroup({ (context) -> Void in
        context.duration = 0.5
        self.animator().frame = newSize
        }, completionHandler: {
            Swift.print("completed")
    })
}

【问题讨论】:

  • 更具体地说,您希望动画/配置什么?

标签: swift macos cocoa caanimation nsanimationcontext


【解决方案1】:

大约一半的地方有一个平滑的 NSView 缩放动画,它似乎是你正在寻找的东西。由于您正在缩放并保持视图慢速运行,因此它也可以解决该问题。

https://www.advancedswift.com/nsview-animations-guide/#smooth-nsview-scale-animations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2023-03-28
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多