HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何将CAGradientLayer添加到CAShapeLayer?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将CAGradientLayer添加到CAShapeLayer,但渐变不符合图层的形状.相反,渐变呈现出UIView本身的形状.我最初尝试使用UIBezierPath,但它也没有用.我试图在我的形状中加入渐变.

override func drawRect(rect: CGRect) {
        let bounds = CGRect(x: 0,y: 0,width: self.bounds.width,height: self.bounds.height)
        let center = self.center

        let path = CAShapeLayer()
        path.bounds = bounds
        path.position = CGPoint(x: center.x,y: center.y)
        //path.BACkgroundColor = UIColor.redColor().CGColor
        path.cornerRadius = 20
        //self.layer.addSublayer(path)
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = path.bounds
        gradientLayer.colors = [cgColorForRed(209.0,green: 0.0,blue: 0.0),cgColorForRed(255.0,green: 102.0,blue: 34.0),green: 218.0,blue: 33.0),cgColorForRed(51.0,green: 221.0,cgColorForRed(17.0,green: 51.0,blue: 204.0),cgColorForRed(34.0,blue: 102.0),blue: 68.0)]
        gradientLayer.startPoint = CGPoint(x:0,y:0)
        gradientLayer.endPoint = CGPoint(x:0,y:1)
        path.insertSublayer(gradientLayer,aTindex: 1)
        self.layer.addSublayer(path)


    }

    func cgColorForRed(red: CGFloat,green: CGFloat,blue: CGFloat ) -> AnyObject {
        return UIColor(red: red/255.0,green: green/255.0,blue: blue/255.5,alpha: 1.0).CGColor as AnyObject
    }

最初我将路径定义为带圆角的矩形的UIBezierPath,我希望用渐变填充:

let insetRect = CGRecTinset(rect,lineWidth / 2,lineWidth / 2)

        let path = UIBezierPath(roundedRect: insetRect,cornerRadius: 10)

        fillColor.setFill()
        path.fill()

        path.lineWidth = self.lineWidth
        UIColor.blackColor().setstroke()
        path.stroke()

根据Larcerax的回复编辑:

class Thermometer: UIView {

    //@IBInspectable var fillColor: UIColor = UIColor.greenColor()
    let lineWidth: CGFloat = 2

    override func drawRect(rect: CGRect) {

        let context = UIGraphicsGetCurrentContext()
        let svgid = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(),[cgColorForRed(209.0,blue: 68.0)],[0,1])
        CGContextSaveGState(context)
        let insetRect = CGRecTinset(rect,cornerRadius: 10)
        path.addClip()
        CGContextDrawLinearGradient(context,svgid,CGPoint(x: 0,y: path.bounds.height),CGPoint(x: path.bounds.width,UInt32(kCGGradientDrawsBeforeStartLOCATIOn) | UInt32(kCGGradientDrawsAfterEndLOCATIOn))
        CGContextRestoreGState(context)
}

解决方法@H_801_21@
您可以尝试类似下面的设置以生成以下形状,这只是一个向您展示设置的示例,但是这应该这样做:

let context = UIGraphicsGetCurrentContext()

    let gradientColor3 = UIColor(red: 1.000,green: 1.000,blue: 1.000,alpha: 1.000)
    let gradientColor4 = UIColor(red: 0.000,blue: 0.000,alpha: 1.000)

    let sVGID_1_2 = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(),[gradientColor3.CGColor,gradientColor4.CGColor],1])

    CGContextSaveGState(context)
    CGContextTranslateCTM(context,198.95,199.4)
    CGContextRotateCTM(context,-30 * CGFloat(M_PI) / 180)

    var polygonPath = UIBezierPath()
    polygonPath.moveToPoint(CGPointMake(0,-145.95))
    polygonPath.addLineToPoint(CGPointMake(126.4,-72.98))
    polygonPath.addLineToPoint(CGPointMake(126.4,72.97))
    polygonPath.addLineToPoint(CGPointMake(0,145.95))
    polygonPath.addLineToPoint(CGPointMake(-126.4,72.98))
    polygonPath.addLineToPoint(CGPointMake(-126.4,-72.97))
    polygonPath.closePath()
    CGContextSaveGState(context)
    polygonPath.addClip()
    CGContextDrawLinearGradient(context,sVGID_1_2,CGPointMake(-126.4,-72.97),CGPointMake(126.41,72.99),UInt32(kCGGradientDrawsBeforeStartLOCATIOn) | UInt32(kCGGradientDrawsAfterEndLOCATIOn))
    CGContextRestoreGState(context)

产生这个:

ios – 如何将CAGradientLayer添加到CAShapeLayer?

如果这不起作用,那么告诉我,我会尝试修复它以使其工作.

另外,这里只是一个简单的矩形:

let context = UIGraphicsGetCurrentContext()

let gradientColor = UIColor(red: 1.000,alpha: 1.000)
let gradientColor2 = UIColor(red: 0.988,green: 0.933,blue: 0.129,alpha: 1.000)
let gradientColor3 = UIColor(red: 1.000,green: 0.000,alpha: 1.000)

let sVGID_1_3 = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(),[gradientColor.CGColor,gradientColor2.CGColor,gradientColor3.CGColor],0.43,1])

let rectanglePath = UIBezierPath(rect: CGRectMake(68,28,78.4,78.4))
CGContextSaveGState(context)
rectanglePath.addClip()
CGContextDrawLinearGradient(context,sVGID_1_3,CGPointMake(68,67.19),CGPointMake(146.38,UInt32(kCGGradientDrawsBeforeStartLOCATIOn) | UInt32(kCGGradientDrawsAfterEndLOCATIOn))
CGContextRestoreGState(context)

ios – 如何将CAGradientLayer添加到CAShapeLayer?

这是一个尝试的功能,你将不得不搞乱颜色,但你可以输入一个框架:

class func drawstuff(#frame: CGRect) {
        let context = UIGraphicsGetCurrentContext()

        let gradientColor = UIColor(red: 1.000,alpha: 1.000)
        let gradientColor2 = UIColor(red: 0.988,alpha: 1.000)
        let gradientColor3 = UIColor(red: 1.000,alpha: 1.000)

        let sVGID_1_4 = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(),1])

        let rectangleRect = CGRectMake(frame.origin.x,frame.origin.y,frame.size.width,frame.size.height)
        let rectanglePath = UIBezierPath(rect: rectangleRect)
        CGContextSaveGState(context)
        rectanglePath.addClip()
        CGContextDrawLinearGradient(context,sVGID_1_4,CGPointMake(rectangleRect.minX,rectangleRect.midY),CGPointMake(rectangleRect.maxX,0)
        CGContextRestoreGState(context)
    }

大佬总结

以上是大佬教程为你收集整理的ios – 如何将CAGradientLayer添加到CAShapeLayer?全部内容,希望文章能够帮你解决ios – 如何将CAGradientLayer添加到CAShapeLayer?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。