オプション2と3は一筋縄ではいかないと思います。あなたができることは、スライダーの値が変更されたときに呼び出されるメソッドを持っていることです。これは、ユーザーがトラックで許可されている値を超えた場合に、スライダーの値を中央で最大に設定します。
これに似たものでスライダーインスタンスを宣言します(メインビットはターゲットの追加です)
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectZero];
slider.continuous = TRUE;
slider.minimumValue = MIN_VALUE; // some min value constant or something?
slider.maximumValue = SLIDER_MAX_VALUE; // some max value constant for the entire slider
slider.value = MIN_VALUE; // or anything else you want
[slider addTarget:self action:@selector(checkBeyondTrack:) forControlEvents:UIControlEventValueChanged];
[self.contentView addSubview:slider];
ここで、スライダーを定義した場所と同じクラスのcheckBeyondTrackメソッドが必要です。
- (void)checkBeyondTrack:(id)sender {
UISlider *slider = sender;
// if we've attempted to go beyond the value allowed
if (slider.value > MAX_TRACK) {
[slider setValue:MAX_TRACK animated:YES];
}
}
ユーザーがスライダーの値を変更するたびに、スライダーターゲットメソッドcheckBeyondTrack:
が呼び出され、チェックが実行され、必要に応じて値がリセットされます。