讓 UISlider 的數值變成固定數量的整數

iOS App 的 UISlider 很方便,可以讓我們快速滑動選擇某個數值。不過 slider 的數值是浮點數,因此結果有無限多種可能,有時我們會希望它是不連續的整數,希望它的結果是固定的數量。比方如下圖利用 slider 選擇文字的字型大小,只有七種字型大小可選擇。

UISlider 的 value 型別為 Float。

想讓 slider 的結果是固定數量其實是做得到的 ! 接下來我們就來實作一個只有整數的 slider 來選擇小王子交過的女朋友個數吧 。

1 設定 slider 的目前數值,最小值,最大值。

Value: 0

Minimum: 0

Maximum: 10。小王子年紀還小,最大值設 10 應該足夠了。

2 連結 slider 的 action 和 label 的 outlet。

@IBOutlet weak var numberLabel: UILabel!

@IBAction func sliderChange(_ sender: UISlider) {
}

3 在 slider 滑動時,將 slider 的 value 四捨五入為整數。

@IBAction func sliderChange(_ sender: UISlider) {
sender.value.round()
numberLabel.text = Int(sender.value).description
}

說明

sender.value.round()

將 value 四捨五入,讓 slider 的圓點滑動到整數的位置,比方 3.2 將變成 3.0,3.6 將變成 4.0。

numberLabel.text = Int(sender.value).description

在 label 上顯示 slider value 的整數值。由於 value 型別為 Float,所以要用 Int(sender.value)變成整數,比方 3.0 將變成 3。

若直接用 numberLabel.text = sender.value.description ,顯示的女朋友數量將變成 3.0,十分奇怪,小王子交過 3.0 個女朋友 !

4 若想要手離開 slider 後圓點才移動到正確的位置,則可將 slider 的 isContinuous 設為 false。

如果有連 slider 的 outlet,比方取名為 girlFriendsSlider,則可在 viewDidLoad 裡設定。

override func viewDidLoad() {
super.viewDidLoad()
girlFriendsSlider.isContinuous = false
}

或是在 storyboard 也可以設定,取消 Slider 裡 Continuous Updates 的勾選。

此時因為 slider 是手放開才更新圓點位置,為了讓呈現的效果更好,可用 setValue(_:animated:) 讓圓點以動畫更新位置。

@IBAction func sliderChange(_ sender: UISlider) {
sender.setValue(sender.value.rounded(), animated: true)
numberLabel.text = Int(sender.value).description
}

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com