1

UISliderで値の密度を変化させる方法について、いくつかの優れたアイデア/ソリューションがありますか。つまり、UISliderの左半分に20ステップ、UISliderの右半分に100ステップあります。つまり、最小値は0、最大値は120になります。ただし、これらは均等に分散されませんが、左側の部分の密度ははるかに低くなります。そのように>

| 0 ---------------20 --------------- 120 |

4

2 に答える 2

2

前半に 0 から 20 までの直線的な進行と、後半に 20 から 120 までの直線的な進行が必要であると仮定すると、次のようになります。

スライダーの範囲を 0 ~ 200 に設定します。次に、目的の値が必要な場合は、次の式を使用してスライダーの値を目的の値に変換します。

if (slider.value <= 100) {
    desiredValue = slider.value / 5.0;
} else {
    desiredValue = slider.value - 80;
}
于 2013-02-04T15:32:44.360 に答える
1

私は最近、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;
于 2013-02-04T15:19:08.973 に答える