1

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

  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 来浏览电影。随着视频的继续,该滑块也应该移动。正如我所说,它确实会移动,但我无法让它顺利移动。

4

1 回答 1

1

Objective-C 中有一个Apple 示例代码,正是您正在寻找的。下面是它在 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()

}
于 2019-01-20T08:44:43.523 回答