iOS - Draw gradient - Swift

前端 未结 2 1336
执念已碎
执念已碎 2020-12-10 08:24

I\'m trying to draw a gradient to UILabel, but it draws only the colors I can\'t see the text. I saw the code from here StackOverflow

my modification:



        
2条回答
  •  死守一世寂寞
    2020-12-10 09:22

    add a view, modify draw rect with below code.

    override func drawRect(rect: CGRect) {
            // Drawing code
    
            let currentContext = UIGraphicsGetCurrentContext()
    
            CGContextSaveGState(currentContext);
            let colorSpace = CGColorSpaceCreateDeviceRGB()
    
            let startColor = UIColor(red: 0.1, green: 0.0, blue: 0.0, alpha: 0.0)
            let startColorComponents = CGColorGetComponents(startColor.CGColor)
            let middleColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.2)
            let middleColorComponents = CGColorGetComponents(middleColor.CGColor)
            let lowerMiddleColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.3)
            let lowerMiddleColorComponents = CGColorGetComponents(lowerMiddleColor.CGColor)
            let endColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.5)
            let endColorComponents = CGColorGetComponents(endColor.CGColor)
    
            var colorComponents = [startColorComponents[0], startColorComponents[1], startColorComponents[2], startColorComponents[3], middleColorComponents[0], middleColorComponents[1], middleColorComponents[2], middleColorComponents[3], lowerMiddleColorComponents[0], lowerMiddleColorComponents[1], lowerMiddleColorComponents[2], lowerMiddleColorComponents[3], endColorComponents[0], endColorComponents[1], endColorComponents[2], endColorComponents[3]]
            var locations:[CGFloat] = [0.0, 0.6, 0.8, 1.0]
            let gradient = CGGradientCreateWithColorComponents(colorSpace,&colorComponents,&locations,4)
            let startPoint = CGPointMake(0, 0)
            let endPoint = CGPointMake(0, self.bounds.height)
            CGContextAddRect(currentContext, CGRect(x: 0, y: 0, width: self.bounds.width, height: self.bounds.height));
            CGContextClip(currentContext);
            CGContextDrawLinearGradient(currentContext,gradient,startPoint,endPoint, CGGradientDrawingOptions.DrawsBeforeStartLocation)
            CGContextRestoreGState(currentContext)
        }
    

    Now in storyboard add a view change class to your gradient class and add a label to this view.

    See if it works for you.

提交回复
热议问题