[英]Change UISlider track color for multiple colors in swift?
當 slider 移動時,我可以使用我獲得的值 (sender.value) 來改變顏色嗎? 隨着 slider 的移動,我正在嘗試將顏色從綠色變為黃色再變為紅色。 請幫忙swift謝謝!
let brokeSlider = UISlider(frame:CGRectMake(5, 440, 355, 20))
brokeSlider.minimumValue = 0
brokeSlider.maximumValue = 1
brokeSlider.continuous = true
brokeSlider.tintColor = UIColor.blackColor()
brokeSlider.value = 0
brokeSlider.addTarget(self, action: #selector(AnnotationPhotoWidget.sliderValueDidChange(_:)), forControlEvents: .ValueChanged)
self.view.addSubview(brokeSlider)
func sliderValueDidChange(sender:UISlider) {
print("value--\(sender.value)")
}
嘗試以下代碼:
func sliderValueDidChange(sender:UISlider) {
print("value--\(sender.value)")
if sender.value <= 0.3 {
brokeSlider.minimumTrackTintColor = UIColor.greenColor()
} else if sender.value > 0.3 && sender.value <= 0.6 {
brokeSlider.minimumTrackTintColor = UIColor.yellowColor()
} else {
brokeSlider.minimumTrackTintColor = UIColor.redColor()
}
}
@ashimVerma 的解決方案效果很好。 要提高一個檔次並獲得平滑的顏色過渡,請試一試:
@objc func sliderValueDidChange(sender: UISlider) {
let saturation = 0.9 // 0...1
let lightness = 0.46 // 0...1
let sliderPercentage = sender.value / sender.maximumValue
let invertedPercentage = 1 - sliderPercentage
let hue = CGFloat(invertedPercentage * 120 / 360)
let brightness = lightness + saturation * min(lightness, 1 - lightness)
var adjustedSaturation: CGFloat = 0.0
if brightness > 0 {
adjustedSaturation = 2 * (1 - lightness / brightness)
}
let trackColor = UIColor(hue: hue, saturation: adjustedSaturation, brightness: brightness, alpha: 1)
brokeSlider.minimumTrackTintColor = trackColor
}
這是通過利用飽和度和亮度恆定的 HSL 色彩空間來實現的。 所以我們只需要根據總色調范圍的一部分來改變色調(從綠色到紅色)。 然后我們將這些值轉換為使用 UIColor 的 HSB 初始值設定項。
參考: https://en.wikipedia.org/wiki/Hue
更簡單:
如果您不需要在 HSL 色彩空間中工作,可以通過直接設置飽和度和亮度值來進一步簡化。
@objc func sliderValueDidChange(sender: UISlider) {
let sliderPercentage = sender.value / sender.maximumValue
let invertedPercentage = 1 - sliderPercentage
let hue = CGFloat(invertedPercentage * 120 / 360)
let trackColor = UIColor(hue: hue, saturation: 0.95, brightness: 0.87, alpha: 1)
brokeSlider.minimumTrackTintColor = trackColor
}
嘗試這個:
import Foundation
import UIKit
class AnnotationPhotoWidget: UIViewController {
let brokeSlider = UISlider(frame:CGRectMake(5, 440, 355, 20))
override func viewDidLoad() {
brokeSlider.minimumValue = 0
brokeSlider.maximumValue = 1
brokeSlider.continuous = true
brokeSlider.tintColor = UIColor.blackColor()
brokeSlider.value = 0
brokeSlider.addTarget(self, action: #selector(AnnotationPhotoWidget.sliderValueDidChange(_:)),forControlEvents: .
ValueChanged)
self.view.addSubview(brokeSlider)
}
func sliderValueDidChange(sender: UISlider) {
if sender.value <= 0.3 {
brokeSlider.minimumTrackTintColor = UIColor.greenColor()
} else if sender.value > 0.3 && sender.value <= 0.6 {
brokeSlider.minimumTrackTintColor = UIColor.yellowColor()
} else {
brokeSlider.minimumTrackTintColor = UIColor.redColor()
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.