Преглед изворни кода

PlaybackSpeedView: Add snap-to-speed with haptic feedback

This adds snap-to-speed with haptic feedback when changing
playback speed and limit it to 14 predefined speed settings.
Adam Horvath пре 5 година
родитељ
комит
db877338c7
1 измењених фајлова са 23 додато и 3 уклоњено
  1. 23 3
      Sources/PlaybackSpeedView.swift

+ 23 - 3
Sources/PlaybackSpeedView.swift

@@ -104,9 +104,29 @@ class PlaybackSpeedView: VLCFrostedGlasView {
 
     @IBAction func playbackSliderAction(sender: UISlider) {
         if sender == playbackSpeedSlider {
-            let speed = exp2(sender.value)
-            vpc.playbackRate = speed
-            playbackSpeedIndicator.text = String(format: "%.2fx", speed)
+            let values: [Float] = [0.25, 0.5, 0.75, 0.9, 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 3.5, 4.0]
+            let rawSpeed = exp2(sender.value)
+            
+            var snappedSpeed: Float = 1.0
+            var closestSpeedDiff: Float = Float.greatestFiniteMagnitude
+            for value in values {
+                let diff = abs(value - rawSpeed)
+                if diff < closestSpeedDiff {
+                    snappedSpeed = value
+                    closestSpeedDiff = diff
+                }
+            }
+            
+            playbackSpeedSlider.value = log2(snappedSpeed)
+            playbackSpeedIndicator.text = String(format: "%.2fx", snappedSpeed)
+            
+            if snappedSpeed != vpc.playbackRate {
+                vpc.playbackRate = snappedSpeed
+                if #available(iOS 10.0, *) {
+                    let generator = UIImpactFeedbackGenerator(style: .medium)
+                    generator.impactOccurred()
+                }
+            }
         } else if sender == audioDelaySlider {
             let delay = round(sender.value / 50) * 50
             vpc.audioDelay = delay