ios – Swift 2.1:CAGradientLayer颜色位置和分布

ios – Swift 2.1:CAGradientLayer颜色位置和分布,第1张

概述我需要在视图中显示3色分布.所以我正在使用以下代码. func drawWithGradientLayer() { // total contains sum of all values contained in segmentValues variable. // I'm using green -> Orange -> Red colors as colors 我需要在视图中显示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,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,1],那么条形图应显示50%红色& 0%橙色,50%红色.如果值为[0,则只绘制redcolor.如何在没有网格线的情况下实现此目的?

任何其他更好的解决方案将永远赞赏:)

解决方法 这里的关键是要了解CAGradIEntLayer中的位置如何工作:

The gradIEnt stops are specifIEd as values between 0 and 1. The values must be monotonically increasing.

因此,您不能指定[1,1]等位置,而应使用[0.0,0.33,0.67,1.0]之类的位置,并且位置值的数量必须与颜色计数相同.

要像图像中那样制作具有短颜色过渡的渐变,您必须重复每种颜色两次并指定适当的位置:

所以你的代码应该是这样的:

gradIEntLayer.colors =  [        UIcolor.greencolor().CGcolor,UIcolor.greencolor().CGcolor,UIcolor.orangecolor().CGcolor,UIcolor.redcolor().CGcolor,UIcolor.redcolor().CGcolor    ]    gradIEntLayer.startPoint = CGPoint(x: 0.0,y: 0.5)    gradIEntLayer.endPoint = CGPoint(x: 1.0,y: 0.5)    gradIEntLayer.locations = [0.0,0.2,0.3,0.7,0.8,1.0]

如果要在不更改颜色的情况下获得双色渐变,可以为startPoint.x设置小于0的值,或者为endPoint.x设置大于1的值,并将多个位置设置为零,例如:

gradIEntLayer.startPoint = CGPoint(x: -0.01,0.0,0.1,1.0]

这会产生类似于此的结果:

总结

以上是内存溢出为你收集整理的ios – Swift 2.1:CAGradientLayer颜色位置和分布全部内容,希望文章能够帮你解决ios – Swift 2.1:CAGradientLayer颜色位置和分布所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1101633.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存