UISliderで値の密度を変化させる方法について、いくつかの優れたアイデア/ソリューションがありますか。つまり、UISliderの左半分に20ステップ、UISliderの右半分に100ステップあります。つまり、最小値は0、最大値は120になります。ただし、これらは均等に分散されませんが、左側の部分の密度ははるかに低くなります。そのように>
| 0 ---------------20 --------------- 120 |
UISliderで値の密度を変化させる方法について、いくつかの優れたアイデア/ソリューションがありますか。つまり、UISliderの左半分に20ステップ、UISliderの右半分に100ステップあります。つまり、最小値は0、最大値は120になります。ただし、これらは均等に分散されませんが、左側の部分の密度ははるかに低くなります。そのように>
| 0 ---------------20 --------------- 120 |
前半に 0 から 20 までの直線的な進行と、後半に 20 から 120 までの直線的な進行が必要であると仮定すると、次のようになります。
スライダーの範囲を 0 ~ 200 に設定します。次に、目的の値が必要な場合は、次の式を使用してスライダーの値を目的の値に変換します。
if (slider.value <= 100) {
desiredValue = slider.value / 5.0;
} else {
desiredValue = slider.value - 80;
}
私は最近、n 乗根の計算を使用して自分UISlider
の位置を特定することで、これと同様のことを行いました。範囲の最小値と最大値を示すスライダーがいくつかありますが、ほとんどの場合、これらの値はスペクトル全体の低い範囲に向かう傾向があるため、より強調したいと思いました. これを実現するために、(私の場合は) 平方根関数を使用してスライダーの位置を計算しました。
slider.value = sqrt(intValue/127.f);
127
は私の範囲の最大値であり、これにより、値スペクトルの低い範囲が強調されます。これにより、64 ではなく 32 の値でスライダー バーを半分いっぱいにしました。これを次のように一般化できます。
slider.value = pow(intValue/127.f, (1/root));
whereroot
は、使用する別の変数です。値が大きいほどroot
、曲線は最初は急勾配になり、終点近くは浅くなります。
代わりに、スライダーの現在の位置を値として読み取りたい場合は、上記の関数を逆にする必要があります。
myValue = (slider.value*slider.value) * 127;
繰り返しますが、次のように一般化できます。
myValue = pow(slider.value, root) * maxValue;