如何为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()
}