问题
I have UIView
in my design and I need to allow user to change the corner radius. I have designed the testier using @IBDesignable
and @IBInspectable
.
I am getting the expected shape(cornerRadius
curve) upto the 33% of cornerRadius
e.g bounds.size.width = 100
,
I am getting correct shadow shape if corner radius is upto 33.
If cornerRadius
is more than 33 then shadow shape becomes circle irrespective of original shape cornerRadius
.
Any suggestion?
Please refer the code and design screenshot below,
Code:
@IBDesignable class DrawingView: UIView {
@IBInspectable var cornerRadius: CGFloat = 0.0
@IBInspectable var borderWidth: CGFloat = 0.0
@IBInspectable var borderColor: UIColor = .clear
@IBInspectable var shadowRadius: CGFloat = 0.0
@IBInspectable var shadowOffset: CGSize = .zero
@IBInspectable var shadowColor: UIColor = .clear
override func draw(_ rect: CGRect) {
// Drawing code
self.layer.cornerRadius = cornerRadius
self.clipsToBounds = true
self.layer.borderWidth = borderWidth
self.layer.borderColor = borderColor.cgColor
let path = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.cornerRadius)
self.layer.shadowPath = path.cgPath
self.layer.shadowRadius = shadowRadius
self.layer.shadowOffset = shadowOffset
self.layer.shadowColor = shadowColor.cgColor
self.layer.masksToBounds = false
self.layer.shadowOpacity = 1.0
}
}
Screenshots:
Corner Radius = 20%
Corner Radius >= 33%
来源:https://stackoverflow.com/questions/53832090/ios-layer-shadow-path-is-not-correct