Как анимировать изменение значения NSSlider в приложении Какао с помощью Swift - PullRequest
0 голосов
/ 18 января 2019

Как анимировать изменение значения 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 Ответ

0 голосов
/ 20 января 2019

В файле target-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()

}
...