我想创建带有阴影和圆角的自定义ContainerView。这个ContainerView以小矩形的形式放置在另一个UIView的顶部。在这种特殊情况下,使用CoreGraphics的附加图层和绘图阴影都没有用。
答案 0 :(得分:4)
您错误地认为其他观看次序/图层无法提供帮助。
您可以将带有圆角的clear
放入另一个//superview for container with rounded corners
shadowedView.backgroundColor = UIColor.clear //this will fix your white corners issue
shadowedView.layer.shadowColor = UIColor.black.cgColor
shadowedView.layer.shadowOffset = .zero
shadowedView.layer.shadowOpacity = 0.3
shadowedView.layer.shadowRadius = 5.0
//add a container with rounded corners
let roundedView = UIView()
roundedView.frame = baseView.bounds
roundedView.layer.cornerRadius = 10
roundedView.layer.masksToBounds = true
shadowedView.addSubview(roundedView)
,并将阴影添加到其中。
为避免出现这些白角,请确保将背景颜色设置为某处{{1}}。
示例:
{{1}}
答案 1 :(得分:0)
我找到了一个合适的解决方案。我将阴影投射到ContainerView
,这是内部每个UIView
的超类。然后,我使用UIViewController
类为这个小矩形区域舍入边缘。
class GraphViewController: UIViewController {
@IBOutlet var graphView: GraphViewRenderer!
override func viewDidLoad() {
graphView.layer.cornerRadius = 20.0
graphView.layer.masksToBounds = true
super.viewDidLoad()
}
}
class GraphContainerView: UIView {
func applyPlainShadow() {
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize.zero
layer.shadowRadius = 5.0
layer.shadowOpacity = 0.7
}
override init(frame: CGRect) {
super.init(frame: frame)
applyPlainShadow()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
applyPlainShadow()
}
}