Мне нужно закруглить нижний левый и правый углы представления и, основываясь на том, что я нашел в Интернете, я создал эту функцию внутри расширения UIview:
func setRoundedCorner(withRadius radius: CGSize, forCorners corners: UIRectCorner ) {
let viewShape = CAShapeLayer()
viewShape.bounds = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: self.bounds.width, height: self.bounds.height)
viewShape.position = self.center
viewShape.path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: radius).cgPath
self.layer.mask = viewShape
}
Теперь я столкнулся с двумя проблемами с этим решением; несмотря на то, что он отлично работает для статического представления, мое представление программно меняет свою высоту, что приводит к усечению представления; Я нашел обходной путь для этой проблемы, каждый раз вспоминая метод setRoundedCorner
, но это очень неудобно для моего представления; есть ли другой способ решить это? Еще одна проблема, которую мне труднее решить, — это набор теней. Я обычно использую этот метод:
func setShadow(height: CGFloat, width: CGFloat, opacity: Float, radius: CGFloat) {
self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.layer.cornerRadius).cgPath
self.layer.shadowColor = UIColor.black.cgColor
self.layer.shadowOpacity = opacity
self.layer.shadowOffset = CGSize(width: width, height: height)
self.layer.cornerRadius = radius
self.layer.masksToBounds = false
}
Вместо этого вид выглядит так, когда тень должна быть под ним:
Но в этой ситуации, похоже, не работает вообще отсутствие тени. Кто-нибудь может дать мне совет?