讓 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
}