创建自定义滑块的方法

时间:2012-12-11 12:08:39

标签: iphone objective-c ios xcode interface-builder

我需要以下滑块控件。

  • 总长度(对应于以秒为单位的总持续时间)
  • UISlider不同,在滑块
  • “可访问”的总长度范围内
  • 滑块在“可访问”轨道上有一个位置,但不会超出它。

我目前看到以下方法,两者似乎都有其优点和缺点:

  1. 创建UISlider子类并向其添加新属性和功能
  2. 我使用UIView创建了一个自定义控件,其中包含一个UISlider和一个UIProgressBar,并提供类似于UISlider的API。
  3. 我使用自定义绘图代码从头开始创建控件。
  4. 我不确定是否有一些方面我错过了。我现在想知道哪种方法最适合我的问题。

2 个答案:

答案 0 :(得分:2)

以下几个链接显示了如何创建自定义滑块:

  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
  6. 注意:通常,对于创建任何UI自定义控件,您只需从UIControl类继承该类,这将允许您拥有所需类的所有属性以及其他属性......但请小心使用它。 ...

答案 1 :(得分:0)

我认为选项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:,执行检查并根据需要重置值。