UISliderに吸着処理を実装する

| コメント(0) | トラックバック(0)
こんにちは。開発担当のICTFです。

滑らかに値を操作できる事がUISliderの魅力ですが、逆に「ぴったりある値に設定する」事は苦手です。
例えば、音声の再生速度をUISliderで滑らかに変動させたい。しかし、ぴったり1倍の再生速度に戻せるようにもしたい。といった機能の実装にそのままUISliderを用いると少々不満が出てしまいます。

今回は滑らかに値を変更させつつも、ある値にぴったりと設定が可能なUISliderの実装方法をご紹介します。
次の仕様でサンプルの実装を行ないます。
  • 再生速度の調整を行なうスライダー
  • スライダーの値は0.5〜1.5
  • デフォルトの値は1.0とする
  • 基本的に滑らかに再生速度の変更を行うが、ぴったり1.0倍に合わせる事が出来るようにする

まずIBでUISliderを配置し、Outletsで_rateSliderと関連づけます。
次に以下のメソッドを宣言し、UISliderのイベントとして関連づけます。

-(IBAction) rateSlider_changeValue:(id)sender;

 →Value Changed

-(IBAction) rateSlider_touchUp:(id)sender;

 →Touch Up Inside と Touch Up Outside

各メソッドの実装に入ります。

// 再生速度スライダーの値変更

-(IBAction) rateSlider_changeValue:(id)sender

{

NSLog(@"rateValue: %f", _rateSlider.value);

if (_player) {

_player.rate = _rateSlider.value;

}

}


// 再生速度スライダーから指が離れたとき

-(IBAction) rateSlider_touchUp:(id)sender

{

// 一定範囲内の値であれば、1.0へ吸着させる

if (_rateSlider.value < 1.2 && _rateSlider.value > 0.8) {

_rateSlider.value = 1.0;

if (_player) {

_player.rate = 1.0;

}

}

}


_playerは、音声の再生を管理する為のインスタンスを保持しています。
_player.rateに_rateSlider.valueを設定する事で、再生速度を変更します。
スライダーから指が離れるとrateSlider_touchUpメソッドがコールされますが、その時に値が0.8より多く、1.2未満であれば1.0に設定するようにしています。
このマージンを多く取る程ストレス無く1.0に吸着できるようになりますが、逆にその範囲内の値に設定する事ができなくなりますので、目的に合わせて適切な値を設定して下さい。

トラックバック(0)

トラックバックURL: http://www.ict-fractal.com/MovableType/mt/mt-tb.cgi/47

コメントする

Twitterボタン
Twitterブログパーツ