2016-09-13 4 views
5

私はUISliderのすべての値を読む必要があります。デバッグ領域にスライダの値を表示すると、スライダを低速のペースで動かすと、すべての値が1ずつ増加することがわかります。下図のようにスライダーの移動速度に関係なく、UISliderのすべての値を読み取る方法は?

Slider values at slow-medium pace

は、しかし、私はスライダが値を高速移動すると大きなステップにジャンプ:

Slider values at fast pace

がありますとにかく私は関係なく、すべてのステップで、スライダーの値を読むことができますそれが動かされる速度の? (好ましくは迅速で)

コード:

@IBAction func didMoveFeedbackSlider(sender: UISlider) { 

    let currentValue = sender.value 
    var currentValueInt = Int(ceil(currentValue)) 

    print("slider value: \(currentValueInt)") 

} 
+1

Afaikでは、スライダーはデフォルトで連続しています( 'isContinuous'プロパティ)。スライダーのプロパティであると仮定すると、これは奇妙な動作に見えます。それはあなたのマウス(マウスの更新率?)を非常に迅速に動かすなど、スライダではなく制御するデバイスのプロパティである可能性はありますか?実際のタッチデバイスでテストしましたか?また、別の 'UIControlEvents'に対してこの動作を試みましたか?たとえば、イベント 'ValueChanged'を明示的に使用して:yourSlider.addTarget(...、forControlEvents:UIControlEvents.ValueChanged) '?)。 – dfri

+0

私はiPhoneでテストしましたが、速く動いたときに値が再び段階的に飛びます。私はまた、ストーリーボードを介して 'IBAction'を接続するのではなく、プログラムによってスライダにターゲットを追加しようとしましたが、これは違いはありませんでした。 – Meurig

+0

スライダーを使用しますか?私はスライダに慣れていませんが、私はUIScrollViewで知っていますが、あなたが求めていることを正確に行うことができますが、あなたのUI設定をどのようにしたいのか分かりません。 – impression7vx

答えて

6

OK、あなたがここにあなたのアルゴリズムをフォローしたい場合は可能な解決策は

var value:Int = 0 
func readSliderValue(val:Int) { 
    while(value != val) { 
     value = value + (val < value ? -1 : 1) // or use += 
     print(value) 
    } 
} 

しかしあるおそらくマットが正しいと問題は設計および/またはアルゴリズムにある。

なぜ値が連続していないのか:スライダは、マウス/指の位置によるスライダの実際の値を表します。あなたのビデオ/ GIFのようにあなたの指を本当に速く動かすと、あなたの指の位置/ジェスチャーをスキャンする内部プロセスがあなたの指より遅くなります。したがって、指の位置の内部アルゴリズムの2つのチェックの間で、指(あなたの指)がスライダーの複数の位置を超えました。だから、スライダーのアイデアは、あなたの指がそこにいかにあるのかを示すのではなく、今のところどこにあるのかを示すことです。スライダーは作成者の視点から正しく動作しています:)

+0

パーフェクト、それはまさに私が必要なものです! – Meurig

関連する問題