需求:三個 `UISlider` 分別對應 R/G/B,拖動即時改變同頁 `UILabel` (或整頁) 背景色。
class ViewController: UIViewController {
@IBOutlet weak var redSlider: UISlider!
@IBOutlet weak var greenSlider: UISlider!
@IBOutlet weak var blueSlider: UISlider!
@IBOutlet weak var colorLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
[redSlider, greenSlider, blueSlider].forEach {
$0?.addTarget(self, action: #selector(sliderChanged), for: .valueChanged)
}
updateColor()
}
@objc func sliderChanged() {
updateColor()
}
func updateColor() {
let r = CGFloat(redSlider.value)
let g = CGFloat(greenSlider.value)
let b = CGFloat(blueSlider.value)
colorLabel.backgroundColor = UIColor(red: r, green: g, blue: b, alpha: 1)
// 若要改整頁背景:view.backgroundColor = ...
}
}
原最佳回答提供的 OC 代碼邏輯正確,但屬於 MRC 時代風格 (`release`/`autorelease`),現代專案請啟用 ARC,刪除所有 `release` 呼叫。
核心:**Slider `value` (0~1) 直接映射 `UIColor` RGBA,`ValueChanged` 事件即時觸發重繪。**