【发布时间】:2015-11-18 19:20:35
【问题描述】:
我需要在视图中显示 3 色分布。所以我正在使用以下代码。
func drawWithGradientLayer() {
// total contains sum of all values contained in segmentValues variable.
// I'm using green -> Orange -> Red colors as colors
if total == 0 {
return
}
if gradientLayer.superlayer != nil {
gradientLayer.removeFromSuperlayer()
}
var previous: CGFloat = (CGFloat(segmentValues[0])/CGFloat(total))
var locations: [NSNumber] = [previous]
for var i=1; i<segmentValues.count; i++ {
previous = previous + (CGFloat(segmentValues[i])/CGFloat(total))
locations.append(previous)
}
locations.append(1.0) // Line may need to be commented
gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)
gradientLayer.startPoint = CGPointMake(0.0, 0.5);
gradientLayer.endPoint = CGPointMake(1.0, 0.5);
gradientLayer.colors = colors
gradientLayer.locations = locations
self.layer.insertSublayer(gradientLayer, atIndex: 0)
}
但问题是渐变颜色没有按照我的要求分布。例如,如果我的值为 [1,0,1],那么条形应该显示 50% 红色和 0% 橙色和 50% 红色。如果值为 [0,0,1],则应仅绘制 redColor。在没有网格线的情况下如何实现这一点?
任何其他更好的解决方案将永远受到赞赏:)
【问题讨论】:
标签: ios swift calayer cagradientlayer