首页 文章

使用滑块为视图的背景选择颜色

提问于
浏览
3

我正在尝试编写一个函数来帮助我从滑块中选择彩虹色并将其设置在视图背景上 .

滑块应该呈现所有彩虹色,并且当用户滑动它时,根据它查看背景变化 .

我做了类似这样的事情,但它只显示一种颜色:

@IBOutlet var slider:UISlider! @IBAction func changeColor(sender:AnyObject){

var increment:CGFloat = 0.05
    var counter = slider.value

    for counter = 1; counter<=20; counter++ {
        for var hue:CGFloat=0.0; hue < 1.0; hue+=increment {

                var color = UIColor(hue: hue, saturation: 1.0, brightness: 1.0, alpha: 1.0)
                self.view.backgroundColor = color
        }
    }
}

2 回答

  • 2

    这里有一个循环是没有意义的 . 您的代码忽略滑块值并始终通过循环,最后将颜色设置为1.0的色调 . (并且它正在完成整个循环20次!所以内部代码实际上总共运行400次,20 x 20 . )

    您可以将背景颜色设置为单一颜色:

    @IBOutlet var slider: UISlider!       
    
    @IBAction func changeColor(sender: AnyObject) {
      var colorValue = CGFloat(slider.value)
      var color = UIColor(hue: colorValue, saturation: 1.0, brightness: 1.0, alpha: 1.0)
      self.view.backgroundColor = color
    }
    

    这假设您在InterfaceBuilder中将滑块的最小值保留为0,最大值保持为1.0 .

    Edit: 由于slider.value从0变为1.0,因此它会镜像hue的允许值 . 我们可以将它转换为CGFloat并直接使用它 . 谢谢@leo .

  • 3

    试试这样:

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            view.backgroundColor = UIColor(hue: 0.5, saturation: 1, brightness: 1, alpha: 1)
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        @IBAction func colorChanged(sender: UISlider) {
            view.backgroundColor = UIColor(hue: CGFloat(sender.value), saturation: 1, brightness: 1, alpha: 1)
        }
    }
    

相关问题