@H_502_8@
@H_502_8@
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,我希望用渐变填充:@H_502_8@
@H_502_8@
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的回复编辑:@H_502_8@
@H_502_8@
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_502_8@
@H_502_8@
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)
产生这个:@H_502_8@
@H_502_8@@H_502_8@
如果这不起作用,那么告诉我,我会尝试修复它以使其工作.@H_502_8@
另外,这里只是一个简单的矩形:@H_502_8@
@H_502_8@
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)
@H_502_8@@H_502_8@
这是一个尝试的功能,你将不得不搞乱颜色,但你可以输入一个框架:@H_502_8@
@H_502_8@
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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)