iPhone OS 2.2から挙動の変わってしまったUISliderだけれど、デバッガーで適当な所で止めてUISliderのインスタンスの中身を覗くと色々見えてくる。
UISlider.hを見ると、以下のフラグが並んでいる。
struct { unsigned int continuous:1; unsigned int animating:1; unsigned int showValue:1; unsigned int trackEnabled:1; unsigned int creatingSnapshot:1; } _sliderFlags; |
で、デバッガーで_sliderFlagsを開いてtrackEnabledの値を1に変更してみる。実行するとiPhone OS 2.1の頃のようにサムだけでなく、バーの部分も反応することが確認できる。
調子に乗ってshowValueも値を1にしてみる。するとスライダーの右側に現在値が表示されるようになる。スライダーの左右にイメージを乗せることができるけれど、その場合、現在値を表示していると色々崩れてしまう。この辺り、showValueが潰されている理由が見える。
実際にコードで上記の値をセットするにはどうしたらいいのかと思ってErica女史のハックを参考にしたら、プライベートメソッドがある事が判った。以下のような定義をソースに加えると、コード側から値をセットできるようになる。
@interface UISlider (extend) - (void)setShowValue:(BOOL)value; - (void)_setTrackEnabled:(BOOL)value; @end |
一応ドキュメントには載っていない方法なので、実行は自己責任でお願いします、と。