Я пытаюсь добавить тень к представлению. В настоящее время у меня есть кнопка и UIView, где UIView находится за кнопкой с тем же фреймом, что и кнопка. Ограничения для UIView — это [верхняя, нижняя, ведущая, конечная] кнопки.
Код для добавления тени выглядит следующим образом:
func applySketchShadow(color: UIColor = .black, alpha: Float = 0.5,
x: CGFloat = 0, y: CGFloat = 2, blur: CGFloat = 4, spread: CGFloat = 0, bgColor: UIColor = .white){
let shadowLayer = CAShapeLayer()
shadowLayer.path = UIBezierPath(roundedRect: bounds, cornerRadius: self.bounds.height/2).cgPath
shadowLayer.fillColor = bgColor.cgColor
shadowLayer.shadowColor = color.cgColor
if spread == 0 {
shadowPath = nil
} else {
let dx = -spread
let rect = bounds.insetBy(dx: dx, dy: dx)
shadowPath = UIBezierPath(rect: rect).cgPath
}
shadowLayer.shadowOffset = CGSize(width: x, height: y)
shadowLayer.shadowOpacity = alpha
shadowLayer.shadowRadius = blur / 2.0
self.insertSublayer(shadowLayer, at: 0)
self.layoutIfNeeded()
self.setNeedsLayout()
}
Я вызываю этот код в ячейке tableview, которая имеет вышеупомянутую кнопку и представление. Код, в котором я вызываю функцию ячейки таблицы, выглядит следующим образом:
расширение GradientButtonCell{
func initCell(topColor : UIColor , bottomColor : UIColor , text : String , orientation : GradientOrientation , textColor : UIColor){
self.gradientButton.applyGradient(
withColours: [topColor , bottomColor],
gradientOrientation: orientation
)
self.gradientButton.setTitleColor(textColor, for: .normal)
self.gradientButton.setTitle(text, for: .normal)
self.gradientButton.titleLabel?.font = UIFont().nexaBold(withSize: 14.0)
self.gradientButton.layer.masksToBounds = true
self.gradientButton.layer.cornerRadius = self.gradientButton.frame.height/2
self.shadowView.layer.applySketchShadow(
color: UIColor.hotPink60,
alpha: 0.6,
x: 0,
y: 2,
blur: 15,
spread: -20
)
}
}
Но по какой-то причине теневой слой продолжает выходить за границы, как показано на изображении.
Любая идея о том, как это исправить, приветствуется.