你好我一直在尝试在我的应用程序中实现一个UIButton,它有一个圆角和一个渐变的边框。我使用以下代码在我的按钮上创建渐变边框:
let gradient = CAGradientLayer()
gradient.frame = CGRect(origin: CGPoint.zero, size: self.myBtn.frame.size)
gradient.colors = [colourOne.cgColor, colourTwo.cgColor]
let shape = CAShapeLayer()
shape.lineWidth = 6
shape.path = UIBezierPath(roundedRect: self.myBtn.bounds, cornerRadius: 22).cgPath
shape.strokeColor = UIColor.black.cgColor
shape.fillColor = UIColor.clear.cgColor
gradient.mask = shape
self.myBtn.layer.addSublayer(gradient)
此代码适用于创建边框,但正如您从图片中看到的那样,角落未正确舍入。我尝试过的其他技术使得圆角完全不可见。
另外,我需要按钮是透明填充,所以我不能简单地进行渐变填充。
如果有人能为我阐明这一点,我将不胜感激。
答案 0 :(得分:2)
在使用UIBezierPath
UIButton
和bounds
创建cornerRadius
之前,您需要设置转角半径。
请尝试以下操作:
self.myBtn.layer.cornerRadius = self.myBtn.frame.height/2
self.myBtn.clipsToBounds = true
let gradient = CAGradientLayer()
gradient.frame = CGRect(origin: CGPoint.zero, size: self.myBtn.frame.size)
gradient.colors = [UIColor.blue.cgColor, UIColor.green.cgColor]
let shape = CAShapeLayer()
shape.lineWidth = 6
shape.path = UIBezierPath(roundedRect: self.myBtn.bounds, cornerRadius: self.myBtn.layer.cornerRadius).cgPath
shape.strokeColor = UIColor.black.cgColor
shape.fillColor = UIColor.clear.cgColor
gradient.mask = shape
self.myBtn.layer.addSublayer(gradient)
<强>输出: - 强>