Здравствуйте, я пытаюсь реализовать в своем приложении 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)
Этот код хорошо подходит для создания границы, но, как вы можете видеть на картинке, углы не скруглены должным образом. Другие техники, которые я испробовал, сделали закругленные углы совершенно невидимыми.
Кроме того, мне нужно, чтобы кнопка была прозрачной заливкой, поэтому я не могу просто сделать градиентную заливку.
Если бы кто-нибудь мог пролить свет на это для меня, я был бы очень признателен.





Вам необходимо установить радиус угла перед созданием UIBezierPath с UIButtonbounds и 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)
Выход:-
как добавить тени к градиентной границе