2012-12-11 150 views
0

我需要以下滑塊控件。創建自定義滑塊的方法

  • 有一個總長度(對應於秒的總的持續時間)
  • 不同於UISlider有總長度是與滑塊
  • 滑塊「可訪問」的範圍內具有上的位置該「可訪問」軌道並不超出它。

我目前看到下面的方法,這些方法似乎都具有各自的優點和缺點:

  1. 創建一個UISlider子類,並增加新的特性和功能,它
  2. 我創建一個自定義的控制其包含UISlider和UIProgressBar並提供與UISlider中的一個類似的API。
  3. 我使用自定義繪圖代碼從頭開始創建控件。

我不確定是否有某些方面我錯過了。我現在想知道哪種方法最適合我的問題。

回答

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

注意:通常爲了創建任何UI自定義控件,您可以簡單地繼承UIControl類中的類,這將允許您擁有所需的類的所有屬性以及其他屬性......但要小心使用它... 。

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]; 
    } 
} 

每次滑塊的值由用戶改變,滑塊ta將調用rget方法checkBeyondTrack:執行檢查並根據需要重置該值。