创建自定义滑块的方法

问题描述:

我需要以下滑块控件。创建自定义滑块的方法

  • 有一个总长度(对应于秒的总的持续时间)
  • 不同于UISlider有总长度是与滑块
  • 滑块“可访问”的范围内具有上的位置该“可访问”轨道并不超出它。

我目前看到下面的方法,这些方法似乎都具有各自的优点和缺点:

  1. 创建一个UISlider子类,并增加新的特性和功能,它
  2. 我创建一个自定义的控制其包含UISlider和UIProgressBar并提供与UISlider中的一个类似的API。
  3. 我使用自定义绘图代码从头开始创建控件。

我不确定是否有某些方面我错过了。我现在想知道哪种方法最适合我的问题。

下面是一些链接,显示如何创建一个自定义的滑块:

  1. https://github.com/barrettj/BJRangeSliderWithProgress
  2. https://github.com/cbpowell/CPSlider
  3. https://github.com/buildmobile/iosrangeslider
  4. https://github.com/taviscaios/TVCalibratedSlider
  5. 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:执行检查并根据需要重置该值。