创建自定义滑块的方法
问题描述:
我需要以下滑块控件。创建自定义滑块的方法
- 有一个总长度(对应于秒的总的持续时间)
- 不同于
UISlider
有总长度是与滑块 - 滑块“可访问”的范围内具有上的位置该“可访问”轨道并不超出它。
我目前看到下面的方法,这些方法似乎都具有各自的优点和缺点:
- 创建一个
UISlider
子类,并增加新的特性和功能,它 - 我创建一个自定义的控制其包含UISlider和
UIProgressBar
并提供与UISlider
中的一个类似的API。 - 我使用自定义绘图代码从头开始创建控件。
我不确定是否有某些方面我错过了。我现在想知道哪种方法最适合我的问题。
答
下面是一些链接,显示如何创建一个自定义的滑块:
- https://github.com/barrettj/BJRangeSliderWithProgress
- https://github.com/cbpowell/CPSlider
- https://github.com/buildmobile/iosrangeslider
- https://github.com/taviscaios/TVCalibratedSlider
- https://github.com/ole/OBSlider
注意:通常为了创建任何UI自定义控件,您可以简单地继承UIControl类中的类,这将允许您拥有所需的类的所有属性以及其他属性......但要小心使用它... 。
答
我认为选项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];
}
}
每次滑块的值由用户改变,滑块ta将调用rget方法checkBeyondTrack:
执行检查并根据需要重置该值。