如何使用 Swift 为 Cocoa 应用程序中的 NSLider 值更改设置动画

Posted

技术标签:

【中文标题】如何使用 Swift 为 Cocoa 应用程序中的 NSLider 值更改设置动画【英文标题】:How to animate NSSlider value change in Cocoa application using Swift 【发布时间】:2019-01-17 22:38:54 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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()


【讨论】:

在 Swift 5 中效果很好。谢谢 Marc!

以上是关于如何使用 Swift 为 Cocoa 应用程序中的 NSLider 值更改设置动画的主要内容,如果未能解决你的问题,请参考以下文章

图书┃Swift与Cocoa框架开发

Cocoa/Swift:遍历路径中文件夹的名称

如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口

保护文档架构中的模型(Cocoa/Swift)

Swift / Cocoa:如何观察文件夹的变化?

如何将NSNib.Name传递给Swift / Cocoa中的窗口控制器