UISliderのトラッキング

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

一応ドキュメントには載っていない方法なので、実行は自己責任でお願いします、と。