代码之家  ›  专栏  ›  技术社区  ›  user5336403

IOS未在coregraphics中显示其他颜色

  •  1
  • user5336403  · 技术社区  · 6 年前

    在这里,我没有使用核心图形在UIView上获得其他颜色。 我想了解核心图形绘图。

        class ProgressMenuView: UIView {
    
        var colors : [UIColor] = [UIColor.red, UIColor.green,UIColor.red,UIColor.green]
        var values : [CGFloat] = [50, 100, 150, 180]
    
        override init(frame: CGRect) {
            super.init(frame: frame)
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        override func draw(_ rect: CGRect) {
    
            let ctx = UIGraphicsGetCurrentContext()
    
            var cumulativeValue:CGFloat = 0
    
            for i in 0..<self.values.count {
                ctx!.fill(CGRect(x: 0, y: cumulativeValue, width:100, height: values[i]))
                ctx!.setFillColor(colors[i].cgColor)
                cumulativeValue += values[i]
            }
    
        }
    
    }
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Sweeper    6 年前

    首先,代码中有一个小错误。这些线可能应该颠倒:

    ctx!.fill(CGRect(x: 0, y: cumulativeValue, width:100, height: values[i])) // ...then fill
    ctx!.setFillColor(colors[i].cgColor) // you should first set the color...
    

    我们只需要在for循环的每次迭代开始时查看每个变量的值。

    • 第1次迭代
      • cumulativeValue -0个
      • values[i] -50个
      • colors[i] -红色
      • 所以这个迭代用红色填充rect(0,0,100,50
    • 第二次迭代
      • 累积价值 -50个
      • 价值观【i】 -100个
      • 颜色【i】 -绿色
      • 所以这个迭代用绿色填充矩形(0,50,100,100
    • 第三次迭代
      • 累积价值 -150个
      • 价值观【i】 -150个
      • 颜色【i】 -红色
      • 所以这个迭代用红色填充rect(0,150,100,150
    • 第4次迭代
      • 累积价值 -300个
      • 价值观【i】 -180个
      • 颜色【i】 -绿色
      • 所以这个迭代用绿色填充矩形(0,300,100,180

    我建议在一张纸上画这些矩形,并用颜色把它们涂上颜色。您将看到这是如何工作的。

    简单地解释一下 values 存储视图每个“段”的长度。共有4段,每段都比前一段长。和 累积价值 存储绘制下一段的位置的y值。

    下面是它在操场上的样子:

    enter image description here

        2
  •  0
  •   Duncan C    6 年前

    您需要在调用之前设置填充颜色 fill() .当我这样做时,它会以你的颜色绘制颜色 Array 正如所料。