我认为选项 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:
都会调用滑块目标方法,该方法执行检查并根据需要重置值。