Is it possible to add multiple colors in a UIProgressView?

后端 未结 3 1313
清酒与你
清酒与你 2021-01-14 19:56

Basically, I want to create a custom progressview that will have different colors depending on the progress value. It should look like the following:

[-----Red----][

3条回答
  •  不要未来只要你来
    2021-01-14 20:15

    Swift 5

    My approach was this, hope this helps you. I piled 4 progres bars on top of each other and inside a stackView.

    struct statsData {
        var number: Int
        var name: String
        var color: UIColor
    }
    
    var data: [statsData] = []
    
    data += [statsData(number: participants.filter{ $0.CATEGORY == "yde"}.count, name: "young", color: #colorLiteral(red: 0.02044569142, green: 0.5364668965, blue: 0.7812533975, alpha: 1)), statsData(number: participants.filter{ $0.CATEGORY == "del"}.count, name: "Delegate", color: #colorLiteral(red: 0.01050937176, green: 0.2793724537, blue: 0.4485790133, alpha: 1)), statsData(number: participants.filter{ $0.CATEGORY == "spk"}.count, name: "Speaker", color: #colorLiteral(red: 0.7677220702, green: 0.6388614774, blue: 0.03215418011, alpha: 1)), statsData(number: participants.filter{ $0.CATEGORY == "acc"}.count, name: "Companion", color: #colorLiteral(red: 0.9999409318, green: 0.5844026208, blue: 0.5724465251, alpha: 1))]
    
    
    func percentageBar(){
    
            data = data.sorted{ $0.number < $1.number }
            //        Front
            Bar0.transform = CGAffineTransform(scaleX: 1, y: 3)
            Bar0.layer.cornerRadius = 4
            Bar0.clipsToBounds = true
            Bar0.progress = Float(100.0 / Float(total) * Float(data[0].number))/100
            Bar0.tintColor = data[0].color
    
    
            Bar1.transform = CGAffineTransform(scaleX: 1, y: 3)
            Bar1.layer.cornerRadius = 4
            Bar1.clipsToBounds = true
            Bar1.progress = Float(100.0 / Float(total) * Float(data[0].number + data[1].number))/100
            Bar1.tintColor = data[1].color
    
    
            Bar2.transform = CGAffineTransform(scaleX: 1, y: 3)
            Bar2.layer.cornerRadius = 4
            Bar2.clipsToBounds = true
            Bar2.progress = Float(100.0 / Float(total) * Float(data[0].number + data[1].number + data[2].number))/100
            Bar2.tintColor = data[2].color
            //      Back
    
            Bar3.transform = CGAffineTransform(scaleX: 1, y: 3)
            Bar3.layer.cornerRadius = 4
            Bar3.clipsToBounds = true
            Bar3.layer.sublayers![1].cornerRadius = 4
            Bar3.subviews[1].clipsToBounds = true
            Bar3.progress = Float(100.0 / Float(total) * Float(data[0].number + data[1].number + data[2].number + data[3].number))/100
            Bar3.tintColor = data[3].color
    
    
        }
    

提交回复
热议问题