Установите два цвета зрения, как бары, не работает, swift - PullRequest
0 голосов
/ 16 октября 2018

У меня есть вопрос о пользовательском горизонтальном barView.
Я установил цвет и значение, но он не показывает мне два цвета, а просто показывает один цвет.
Я не знаю, как исправитьit.
И, если я хочу, чтобы индекс цветов 0 и значения индекса 0 оставляли цвет, индекс цветов 1 и значения индекса 1 соответствовал цвету.Есть идеи для меня.
Спасибо.

why show me one color.

 import SnapKit

    class MyAssetView: UIView {

    let barView: BarView = { () -> BarView in
        let ui = BarView()
        ui.colors = [UIColor.blue, UIColor.red]
        ui.values = [0.2, 0.8]
        return ui
    }()


    override init(frame: CGRect = CGRect.zero) {
        super.init(frame: frame)

        self.setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    func setupView(){

        self.addSubview(barView)

        barView.snp.makeConstraints { (make) in
            make.top.equalTo(10)
            make.left.equalTo(30)
            make.height.equalTo(30)
            make.right.equalTo(-30)
        }
    }

    }

    class BarView : UIView {

    var colors : [UIColor] = [UIColor]() {
        didSet {
            self.setNeedsDisplay()
        }
    }

    var values : [CGFloat] = [CGFloat]() {
        didSet {
            self.setNeedsDisplay()
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.clear
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func draw(_ rect: CGRect) {

        let r = self.bounds // the view's bounds
        let numberOfSegments = values.count // number of segments to render

        let ctx = UIGraphicsGetCurrentContext() // get the current context

        var cumulativeValue:CGFloat = 0 // store a cumulative value in order to start each line after the last one
        for i in 0..<numberOfSegments {

            ctx!.setFillColor(colors[i].cgColor) // set fill color to the given color if it's provided, else use clearColor
            ctx!.fill(CGRect(x: 0, y: 0, width: values[i]*r.size.width, height: r.size.height)) // fill that given segment

            cumulativeValue += values[i] // increment cumulative value
        }
    }
    }

1 Ответ

0 голосов
/ 16 октября 2018

В func draw у вас есть ошибка, в ctx!.fill методе вы должны использовать ваше cumulativeValue в качестве источника X.

ctx!.fill(CGRect(x: cumulativeValue*r.size.width, y: 0, width: values[i]*r.size.width, height: r.size.height)) // fill that given segment
...