如何为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来擦洗电影的视频播放器。视频继续播放时,该滑块也应移动。就像我说的那样,它确实可以移动,但是我无法使其平稳移动。

最佳答案

正是您要寻找的在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()

}

10-08 05:40