Swift如何绘制渐变色(swift,开发技术)

时间:2024-05-08 16:50:07 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

示意图:

Swift如何绘制渐变色

importFoundationimportUIKitclassGradientVC:UIViewController{@IBOutletweakvarbutOne:GradientCustomButton!@IBOutletweakvarviewTwo:UIView!overridefuncviewDidLoad(){super.viewDidLoad()///方式一xib添加渐变色///方式一代码添加渐变色butOne.isGradient=truebutOne.startColor=UIColor(hexString:"#FD0134")!butOne.endColor=UIColor(hexString:"#007AFF")!butOne.startPoint=CGPoint(x:0,y:0)butOne.endPoint=CGPoint(x:1,y:1)///方式二//viewTwo.addGradient(start_color:"#8238FF",end_color:"#007AFF")//viewTwo.layer.masksToBounds=trueviewTwo.addGradient(colors:[UIColor(hexString:"#FD0134")!,UIColor(hexString:"#007AFF")!],point:(CGPoint(x:1.0,y:0.0),CGPoint(x:0.0,y:1.0)),frame:CGRect(x:0,y:0,width:UIScreen.main.bounds.width-40,height:100),radius:0)}}

方式一:

使用xib或代码的方式添加渐变色.

Swift如何绘制渐变色

Swift如何绘制渐变色

Swift如何绘制渐变色

这种方式有个缺点, 若是要对更多的视图(比如UILabel)添加渐变色, 需要继续创建一个子类继承于它进行功能的拓展.

importFoundationimportUIKitclassGradientCustomView:UIView{@IBInspectablevarisGradient:Bool=false@IBInspectablevarstartColor:UIColor=.white@IBInspectablevarendColor:UIColor=.white@IBInspectablevarlocations:[NSNumber]=[0,1]@IBInspectablevarstartPoint:CGPoint=.zero@IBInspectablevarendPoint:CGPoint=.zeroprivatevargradientBGLayer:CAGradientLayer?overridefunclayoutSubviews(){super.layoutSubviews()gradientBGLayer?.removeFromSuperlayer()ifisGradient{gradientBGLayer=CAGradientLayer()gradientBGLayer!.colors=[startColor.cgColor,endColor.cgColor]gradientBGLayer!.locations=locationsgradientBGLayer!.frame=boundsgradientBGLayer!.startPoint=startPointgradientBGLayer!.endPoint=endPointself.layer.insertSublayer(gradientBGLayer!,at:0)}}}classGradientCustomButton:UIButton{@IBInspectablevarisGradient:Bool=false@IBInspectablevarstartColor:UIColor=.white@IBInspectablevarendColor:UIColor=.white@IBInspectablevarlocations:[NSNumber]=[0,1]@IBInspectablevarstartPoint:CGPoint=.zero@IBInspectablevarendPoint:CGPoint=.zeroprivatevargradientBGLayer:CAGradientLayer?overridefunclayoutSubviews(){super.layoutSubviews()gradientBGLayer?.removeFromSuperlayer()ifisGradient{gradientBGLayer=CAGradientLayer()gradientBGLayer!.colors=[startColor.cgColor,endColor.cgColor]gradientBGLayer!.locations=locationsgradientBGLayer!.frame=boundsgradientBGLayer!.startPoint=startPointgradientBGLayer!.endPoint=endPointself.layer.insertSublayer(gradientBGLayer!,at:0)}}}

方式二:

直接拓展UIView,让每个继承于UIView的视图都可以调用拓展的方法.

这种方式的缺点就是无法在Xib中使用

importFoundationimportUIKitextensionUIView{@discardableResultfuncaddGradient(colors:[UIColor],point:(CGPoint,CGPoint)=(CGPoint(x:0.5,y:0),CGPoint(x:0.5,y:1)),locations:[NSNumber]=[0,1],frame:CGRect=CGRect.zero,radius:CGFloat=0,at:UInt32=0)->CAGradientLayer{letbgLayer1=CAGradientLayer()bgLayer1.colors=colors.map{$0.cgColor}bgLayer1.locations=locationsifframe==.zero{bgLayer1.frame=self.bounds}else{bgLayer1.frame=frame}bgLayer1.startPoint=point.0bgLayer1.endPoint=point.1bgLayer1.cornerRadius=radiusself.layer.insertSublayer(bgLayer1,at:at)returnbgLayer1}funcaddGradient(start:CGPoint=CGPoint(x:0.5,y:0),end:CGPoint=CGPoint(x:0.5,y:1),colors:[UIColor],locations:[NSNumber]=[0,1],frame:CGRect=CGRect.zero,radius:CGFloat=0,at:UInt32=0){letbgLayer1=CAGradientLayer()bgLayer1.colors=colors.map{$0.cgColor}bgLayer1.locations=locationsbgLayer1.frame=framebgLayer1.startPoint=startbgLayer1.endPoint=endbgLayer1.cornerRadius=radiusself.layer.insertSublayer(bgLayer1,at:at)}funcaddGradient(start_color:String,end_color:String,frame:CGRect?=nil,cornerRadius:CGFloat?=0,at:UInt32=0){varbounds:CGRect=self.boundsifletframe=frame{bounds=frame}letbgLayer1=CAGradientLayer()bgLayer1.colors=[UIColor(hexString:start_color)!.cgColor,UIColor(hexString:end_color)!.cgColor]bgLayer1.locations=[0,1]bgLayer1.frame=boundsbgLayer1.startPoint=CGPoint(x:0,y:0.61)bgLayer1.endPoint=CGPoint(x:0.61,y:0.61)bgLayer1.cornerRadius=cornerRadius??0self.layer.insertSublayer(bgLayer1,at:at)}funcaddGradient(start_color:String,end_color:String,frame:CGRect?=nil,borader:CGFloat=0,boraderColor:UIColor=.clear,at:UInt32=0,corners:UIRectCorner?,radius:CGFloat=0){varbounds:CGRect=self.boundsifletframe=frame{bounds=frame}letbgLayer1=CAGradientLayer()bgLayer1.colors=[UIColor(hexString:start_color)!.cgColor,UIColor(hexString:end_color)!.cgColor]bgLayer1.locations=[0,1]bgLayer1.frame=boundsbgLayer1.startPoint=CGPoint(x:0,y:0.61)bgLayer1.endPoint=CGPoint(x:0.61,y:0.61)bgLayer1.borderColor=boraderColor.cgColorbgLayer1.borderWidth=boraderifcorners!=nil{letcornerPath=UIBezierPath(roundedRect:bounds,byRoundingCorners:corners!,cornerRadii:CGSize(width:radius,height:radius))letradiusLayer=CAShapeLayer()radiusLayer.frame=boundsradiusLayer.path=cornerPath.cgPathbgLayer1.mask=radiusLayer}self.layer.insertSublayer(bgLayer1,at:at)}funcaddGradient(startPoint:CGPoint=CGPoint(x:0,y:0.5),start_color:String,endPoint:CGPoint=CGPoint(x:1,y:0.5),end_color:String,frame:CGRect?=nil,cornerRadius:CGFloat?=0){varbounds:CGRect=self.boundsifletframe=frame{bounds=frame}letbgLayer1=CAGradientLayer()bgLayer1.frame=boundsbgLayer1.startPoint=startPointbgLayer1.endPoint=endPointbgLayer1.colors=[UIColor(hexString:start_color)!.cgColor,UIColor(hexString:end_color)!.cgColor]bgLayer1.locations=[0,1]bgLayer1.cornerRadius=cornerRadius??0self.layer.addSublayer(bgLayer1)}funcaddVerticalGradient(start_color:String,end_color:String,frame:CGRect?=nil,cornerRadius:CGFloat?=0){varbounds:CGRect=self.boundsifletframe=frame{bounds=frame}letbgLayer1=CAGradientLayer()bgLayer1.colors=[UIColor(hexString:start_color)!.cgColor,UIColor(hexString:end_color)!.cgColor]bgLayer1.locations=[0,1]bgLayer1.frame=boundsbgLayer1.startPoint=CGPoint(x:0.5,y:0)bgLayer1.endPoint=CGPoint(x:1,y:1)bgLayer1.cornerRadius=cornerRadius??0self.layer.insertSublayer(bgLayer1,at:0)}//将当前视图转为UIImagefuncasImage()->UIImage{letrenderer=UIGraphicsImageRenderer(bounds:bounds)returnrenderer.image{rendererContextinlayer.render(in:rendererContext.cgContext)}}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Swift如何绘制渐变色的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:vue如何使用rules实现表单字段验证下一篇:

19 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18