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