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