大佬教程收集整理的这篇文章主要介绍了ios – 如何将CAGradientLayer添加到CAShapeLayer?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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) }
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)
产生这个:
如果这不起作用,那么告诉我,我会尝试修复它以使其工作.
另外,这里只是一个简单的矩形:
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)
这是一个尝试的功能,你将不得不搞乱颜色,但你可以输入一个框架:
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,请注明来意。