1. 程式人生 > >iOS滑動條UISlider的使用方法

iOS滑動條UISlider的使用方法

由於專案的需求,學習使用了一下滑動條UISlider的使用方法,這裡記錄一下。

首先看我們實現出來的效果:


如上圖所示,在圖中有四個內容:滑動條本身、最小值label、最大值label、當前值label。

隨著滑動條的左右滑動,中間的當前值label會跟著做出變化。

現在看看怎麼實現的:

1.首先我們要建立滑動條,這是肯定的,建立程式碼如下:

    // 滑動條slider
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake((SCREENWIDTH - 150) / 2, 200, 150, 20)];
    [self.view addSubview:slider];

我是用純程式碼建立的,當然也可以直接在storyboard中拖一個到介面上,那樣其實很簡單,就不說了。

寬度我用了一個自定義的螢幕寬度常量。這裡要注意的一點是,滑動條的高度,如果設為0,其實還是會正常顯示。但是!一旦高度設為0,滑動條將不能左右滑動!我就入過這個坑。。。找了半天沒找到原因,最終發現是這裡的問題。

當然我們還僅僅定義了滑動條的位置,還有很多屬性沒有定義,我們接著設定:

    // 滑動條slider
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake((SCREENWIDTH - 150) / 2, 200, 150, 20)];
    slider.minimumValue = 9;// 設定最小值
    slider.maximumValue = 11;// 設定最大值
    slider.value = (slider.minimumValue + slider.maximumValue) / 2;// 設定初始值
    slider.continuous = YES;// 設定可連續變化
//    slider.minimumTrackTintColor = [UIColor greenColor]; //滑輪左邊顏色,如果設定了左邊的圖片就不會顯示
//    slider.maximumTrackTintColor = [UIColor redColor]; //滑輪右邊顏色,如果設定了右邊的圖片就不會顯示
//    slider.thumbTintColor = [UIColor redColor];//設定了滑輪的顏色,如果設定了滑輪的樣式圖片就不會顯示
    [slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];// 針對值變化新增響應方法
    [self.view addSubview:slider];

如上所示,在程式碼中,我們設定了最大值、最小值、當前值。也可以改變滑動條左邊、右邊一集滑塊本身的顏色,不過我們這裡採用預設的設定,更改方法程式碼中也寫了。除了可以設定顏色外,還可以設定最大最小值處的圖片。

現在我們注意一個設定:slider.continuous = YES; 這個設定有什麼用呢?設為YES後,我們才能在拖動滑塊的過程中持續獲取其值變更事件,如果是NO,則只有在滑動停止時才會獲取變更事件。

這個變更事件又是什麼呢?我們只是對一個按鈕設定響應方法的時候,設定的響應事件是Touch up inside。在滑動條中,相對應的就是ValueChanged。所以我們設定響應方法時,也是針對的這個方法。

2.滑動條建立完畢後,接著建立那三個label:

建立labelde程式碼很常見,這裡就直接貼出來了:

    // 當前值label
    self.valueLabel = [[UILabel alloc] initWithFrame:CGRectMake((SCREENWIDTH - 100) / 2, slider.frame.origin.y + 30, 100, 20)];
    self.valueLabel.textAlignment = NSTextAlignmentCenter;
    self.valueLabel.text = [NSString stringWithFormat:@"%.1f", slider.value];
    [self.view addSubview:self.valueLabel];
    
    // 最小值label
    UILabel *minLabel = [[UILabel alloc] initWithFrame:CGRectMake(slider.frame.origin.x - 35, slider.frame.origin.y, 30, 20)];
    minLabel.textAlignment = NSTextAlignmentRight;
    minLabel.text = [NSString stringWithFormat:@"%.1f", slider.minimumValue];
    [self.view addSubview:minLabel];
    
    // 最大值label
    UILabel *maxLabel = [[UILabel alloc] initWithFrame:CGRectMake(slider.frame.origin.x + slider.frame.size.width + 5, slider.frame.origin.y, 30, 20)];
    maxLabel.textAlignment = NSTextAlignmentLeft;
    maxLabel.text = [NSString stringWithFormat:@"%.1f", slider.maximumValue];
    [self.view addSubview:maxLabel];

這裡值得注意的是,我們label的值並不是直接定義的,而是獲取滑動條的最大、最小、當前值,然後取小數點前一位顯示的,因為滑動條是連續變化的,其值是浮點型的連續小數,如果不取小數點後的位數,得到的將是沒有規律的小數。

3.現在來看拖動滑動條時的響應方法:

我們要做到的是當前值的label顯示的內容隨著滑動條的滑動而變化,那麼只需要在滑動條的響應方法中設定label的顯示內容就可以了,注意同樣要取小數點前一位:

// slider變動時改變label值
- (void)sliderValueChanged:(id)sender {
    UISlider *slider = (UISlider *)sender;
    self.valueLabel.text = [NSString stringWithFormat:@"%.1f", slider.value];
}

因為我們continuous設為了YES,所以顯示的當前值會隨著拖動實時改變。

以上,就是滑動條的使用方法了。