【问题标题】:How to make a Gradient in CAGradientLayer follow a certain value on a slider?如何使 CAGradientLayer 中的渐变跟随滑块上的某个值?
【发布时间】:2018-02-19 12:11:10
【问题描述】:

如何更改 CAGradient 图层中的渐变图层,以便能够仅通过查看放置在滑块上的 CAGradient 图层的颜色来查看滑块上某个值的开始位置?这是我到目前为止的代码...

func sliderValueDidChange(slider:[UISlider]) {
    for index in 0...slider.count - 1 {
        let tgl = CAGradientLayer()
        let frame = CGRect(x: 0, y: 0, width: Double(slider[index].bounds.width), height: 5)
        tgl.frame = frame


        tgl.colors = [UIColor.yellow.cgColor, UIColor.green.cgColor, UIColor.yellow.cgColor]


        tgl.borderWidth = 0.5
        tgl.borderColor = UIColor.gray.cgColor
        tgl.cornerRadius = 2.5




        tgl.endPoint = CGPoint(x: 1.0, y:1.0)
        tgl.startPoint = CGPoint(x: 0.0, y:1.0)



        UIGraphicsBeginImageContextWithOptions(tgl.frame.size, false, 0.0)
        tgl.render(in: UIGraphicsGetCurrentContext()!)
        let backgroundImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()


        slider[index].setMaximumTrackImage(backgroundImage?.resizableImage(withCapInsets: .init(top: 0.5, left: 1.0, bottom: 1.0, right: 1.0)), for:.normal)
        slider[index].setMinimumTrackImage(backgroundImage?.resizableImage(withCapInsets: .zero), for:.normal)
    }

【问题讨论】:

    标签: swift4 xcode9 uislider cagradientlayer


    【解决方案1】:

    您可以通过获取特定值并将其与滑块的最大值分开来解决此问题,这样您就可以获得滑块的百分比。然后你像这样使用它作为gradientLayer的位置

    func sliderValueDidChange(slider:UISlider) {
        var floatNumberOne = Float()
        var floatNumberTwo = Float()
        var numbersOne = [NSNumber]()
        var splitTwo = [Float()]
        var valueYouWhantTheFirstGradientToEndAt = 130
        var valueYouWhantTheSecondGradientToEndAt = 170
    
    
        floatNumberOne = Float(valueYouWhantTheFirstGradientToEndAt)
        floatNumberTwo = Float(valueYouWhantTheSecondGradientToEndAt)
    
    
        var split = scaleSplit(numberOne: floatNumberOne, numberTwo: floatNumberTwo)
    
    
    
    
        print(floatNumberOne, floatNumberTwo)
    
    
    
        numbersOne.append(split[0] as! NSNumber)
        numbersOne.append(split[1] as! NSNumber)
    
    
    
    
        print(numbersOne)
    
    
    
    
    
            let tgl = CAGradientLayer()
            let frame = CGRect(x: 0, y: 0, width: Double(slider.bounds.width), height: 5)
    
            tgl.frame = frame
    
            tgl.colors = [UIColor.yellow.cgColor, UIColor.green.cgColor]
    
    
            tgl.borderWidth = 0.5
            tgl.borderColor = UIColor.gray.cgColor
            tgl.cornerRadius = 2.5
    
    
            tgl.locations = numbersOne
    
    
    
            tgl.endPoint = CGPoint(x: 1.0, y:1.0)
            tgl.startPoint = CGPoint(x: 0.0, y:1.0)
    
    
    
            UIGraphicsBeginImageContextWithOptions(tgl.frame.size, false, 0.0)
            tgl.render(in: UIGraphicsGetCurrentContext()!)
            let backgroundImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
    
    
            slider.setMaximumTrackImage(backgroundImage?.resizableImage(withCapInsets: .init(top: 0.5, left: 1.0, bottom: 1.0, right: 1.0)), for:.normal)
            slider.setMinimumTrackImage(backgroundImage?.resizableImage(withCapInsets: .zero), for:.normal)
    
    
    
    
    }
    func scaleSplit(numberOne: Float, numberTwo:Float)->[Float]{
        var splitter = [Float]()
        var splitterOne = Float()
        var splitterTwo = Float()
    
        splitterOne = numberOne/Float(maxValueOfSlider)
        spliterTwo = numberTwo/Float(maxValueOfSlider)
    
    
    
        splitter = [splitterOne, splitterTwo]
    
        return splitter
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-19
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多