タイムライン上の整数を表す離散点でスライダを停止させたいと考えています。これを行う最善の方法は何ですか?私はその間に値を入れたくありません。スライダが各離散点に位置するように「スナップ」することができれば、素晴らしいことです。iOS離散点でスライダを停止する方法
答えて
スライダーを特定のポイントにスティックさせるには、viewControllerは、スライダーからリンクされたvalueChangedメソッドで、スライダーの値から適切な値を決定し、setValue:animated:を使用してスライダーを適切な場所。したがって、スライダが0から2に変化し、ユーザがスライダを0.75に変更した場合、スライダ値を1に設定し、スライダ値をそれに設定します。
私がここで取った手順は、jrturtonの答えに記載されている手順とほぼ同じでしたが、スライダは動きの後ろにある遅れをかなり目立ちます。これは私がこれをした方法です:
Interface Builderのビューにスライダーを置きます。 スライダの最小/最大値を設定します。これは、Interface Builderで、私は「タッチアップインサイドをフックアップした後
- (IBAction)sliderChanged:(id)sender
{
int sliderValue;
sliderValue = lroundf(mySlider.value);
[mySlider setValue:sliderValue animated:YES];
}
:.Mファイルで
@property (strong, nonatomic) IBOutlet UISlider *mySlider;
- (IBAction)sliderChanged:(id)sender;
:.hファイルで
(Iは0と5を使用しました) 'イベントではなく、'値が変更されました '。これで、指が離されたときにスライダとスナップをスムーズに各整数に移動できます。
ありがとう@jrturton!
UPDATE - スウィフト:
@IBOutlet var mySlider: UISlider!
@IBAction func sliderMoved(sender: UISlider) {
sender.setValue(Float(lroundf(mySlider.value)), animated: true)
}
はまた、ストーリーボードで物事をフック上の混乱がある場合、私はgithubのに簡単な例をアップロードした:https://github.com/nathandries/StickySlider
ニース、丸めますlroundfは最も近い整数に丸めます。 –
私はまた、 'Touch Up Outside' – Zenuka
私はこのためにした何をされます最初に現在のスライダ値の "出力"変数を整数(デフォルトでは浮動小数点数)に設定します。
int output = (int)mySlider.value;
mySlider.value = output;
これは、1つの整数単位で移動するように設定します。そして、スライダーの現在の値として出力数を設定します。特定の範囲の数値、たとえば5秒で動かすには、次の式で出力値を変更します。上記の最初の2行の間にこれを追加します。
int output = (int)mySlider.value;
int newValue = 5 * floor((output/5)+0.5);
mySlider.value = newValue;
これで、スライダを移動すると5の倍数にジャンプします。
ネイサンが示唆したように、私がやったが、私もそう、ここで、リアルタイムに現在の値を表示する関連するUILabel
は私がやったことで更新したい:
- (IBAction) countdownSliderChanged:(id)sender
{
// Action Hooked to 'Value Changed' (continuous)
// Update label (to rounded value)
CGFloat value = [_countdownSlider value];
CGFloat roundValue = roundf(value);
[_countdownLabel setText:[NSString stringWithFormat:@" %2.0f 秒", roundValue]];
}
- (IBAction) countdownSliderFinishedEditing:(id)sender
{
// Action Hooked to 'Touch Up Inside' (when user releases knob)
// Adjust knob (to rounded value)
CGFloat value = [_countdownSlider value];
CGFloat roundValue = roundf(value);
if (value != roundValue) {
// Almost 100% of the time - Adjust:
[_countdownSlider setValue:roundValue];
}
}
欠点、もちろん、それはそれでありますスライダーごとに2つのアクション(メソッド)をとります。
- 1. 離散を否定する方法
- 2. iOS:部分的なカールでテキストアニメーションを停止する方法
- 3. URLにハッシュタグを追加しないようにスライダを停止する方法
- 4. Javaでスレッドを停止、一時停止、キャンセルする方法
- 5. iOSプログラミングの時間を一時停止する方法
- 6. ランダムな点でカウントダウンタイマーが停止する
- 7. iOSでAVPlayerを停止する
- 8. iOS:ポップオーバーを解散する方法
- 9. 点滅イベントを停止
- 10. "画面"を離れるときにタイマーを停止する方法
- 11. pythonでrequest.getを停止する方法
- 12. PowerShellでIISを停止する方法?
- 13. マウスを動かすとJQueryスライダが停止する
- 14. 浮動小数点数を離散セグメントに分割する
- 15. 与えられた時点でスレッドを停止する方法は?
- 16. WCF、ビルド時に停止するlog4netファイルの停止方法
- 17. iOS 5.1バックグラウンドミュージックプレーヤーを停止する
- 18. オーディオの再生終了時にスライダが停止する
- 19. XSLアンエスケープURLを停止する方法
- 20. 通知を停止する方法Audio?
- 21. ライブバインドを停止する方法
- 22. スレッドを一時停止する方法
- 23. エンティティフレームワークキャッシングを停止する方法
- 24. フリーズlistViewを停止する方法
- 25. touchesMovedを停止する方法
- 26. gSOAP操作を停止する方法
- 27. /停止を起動する方法/スレッド
- 28. nsurlconnectionを停止する方法は?
- 29. Swing EDTを停止する方法
- 30. NSInvocationOperationを停止する方法は?
以下のようにNathanが言っているように、値を使うとドラッグすると点滅するので 'Touch up inside'を使用してください – Zenuka
スライダーが連続している場合のみ適用されますが、その場合はより良い解決方法です – jrturton