如何使用 Swift 为 Cocoa 应用程序中的 NSSlider 值变化设置动画

How to animate NSSlider value change in Cocoa application using Swift

如何为 NSSlider 值变化设置动画,使其看起来连续? 我尝试使用 NSAnimation context

  private func moveSlider(videoTime: VLCTime) {
    DispatchQueue.main.async { [weak self] in
        NSAnimationContext.beginGrouping()
        NSAnimationContext.current.duration = 1
        self?.playerControls.seekSlider.animator().intValue = videoTime.intValue
        NSAnimationContext.endGrouping()
    }
}

我的 NSSlider 还是不流畅

为了让您融入画面,我正在尝试制作一个使用 NSSlider 浏览电影的视频播放器。随着视频的继续,该滑块也应该移动。正如我所说,它确实会移动,但我无法让它顺利移动。

objective-C 中有一个 Apple sample code 正是您要查找的内容。下面是 Swift.

中的样子

基本上你需要一个 NSSlider 的扩展

extension NSSlider {

    override open class func defaultAnimation(forKey key: NSAnimatablePropertyKey) -> Any?{

        if key == "floatValue"{
            return CABasicAnimation()
        }else {
            return super.defaultAnimation(forKey: key)
        }
    }
}

然后你可以简单地在你的移动滑块功能中使用类似这样的东西。

private func moveSlider(videoTime: Float) {

        NSAnimationContext.beginGrouping()
        NSAnimationContext.current.duration = 0.5
        slider.animator().floatValue = videoTime
        NSAnimationContext.endGrouping()

}