"sibling" 视图顶部不可见阴影
Shadow not visible on top of "sibling" view
我正在尝试在视图顶部创建阴影。
这是我的层次结构:
查看
------TablewView
------底视图
TableView 和 BottomView 具有相同的父视图:View。
我希望 BottomView 在 TableView 的顶部有一个阴影,就像左边的图片一样,但结果是右边的那个:
如果我尝试删除 TableView,我会看到阴影。
BottomView 有圆角。
这是底部视图 Class:
class BottomView: UIView {
private var shadowLayer: CAShapeLayer!
override func layoutSubviews() {
super.layoutSubviews()
if shadowLayer == nil {
let shadowLayer = CAShapeLayer()
shadowLayer.masksToBounds = false
//rect is an ex.
shadowLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 200, height: 80), cornerRadius: 9).cgPath
shadowLayer.fillColor = UIColor.red.cgColor
shadowLayer.shadowColor = UIColor.black.cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowOffset = CGSize(width: 5, height: -5)
shadowLayer.shadowOpacity = 1
shadowLayer.shadowRadius = 3
shadowLayer.zPosition = 10
layer.insertSublayer(shadowLayer, at: 0)
clipsToBounds = false
}
}
}
第一个问题是变量/对象范围...
class BottomView: UIView {
private var shadowLayer: CAShapeLayer!
override func layoutSubviews() {
super.layoutSubviews()
if shadowLayer == nil {
let shadowLayer = CAShapeLayer()
...
你说:let shadowLayer = CAShapeLayer()
,你刚刚创建了一个 新的本地 shadowLayer
对象,并且它在超出范围时消失(在 if
块的末尾)。
将该行更改为:
shadowLayer = CAShapeLayer() // remove the let
你应该会看到自己的影子。
您可以 "automate" 调整大小,方法是在 if
块下方添加:
if shadowLayer != nil {
shadowLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height), cornerRadius: 9).cgPath
}
这将在视图更改大小时随时重新调整阴影层的大小。
我正在尝试在视图顶部创建阴影。
这是我的层次结构:
查看
------TablewView
------底视图
TableView 和 BottomView 具有相同的父视图:View。
我希望 BottomView 在 TableView 的顶部有一个阴影,就像左边的图片一样,但结果是右边的那个:
如果我尝试删除 TableView,我会看到阴影。 BottomView 有圆角。 这是底部视图 Class:
class BottomView: UIView {
private var shadowLayer: CAShapeLayer!
override func layoutSubviews() {
super.layoutSubviews()
if shadowLayer == nil {
let shadowLayer = CAShapeLayer()
shadowLayer.masksToBounds = false
//rect is an ex.
shadowLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 200, height: 80), cornerRadius: 9).cgPath
shadowLayer.fillColor = UIColor.red.cgColor
shadowLayer.shadowColor = UIColor.black.cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowOffset = CGSize(width: 5, height: -5)
shadowLayer.shadowOpacity = 1
shadowLayer.shadowRadius = 3
shadowLayer.zPosition = 10
layer.insertSublayer(shadowLayer, at: 0)
clipsToBounds = false
}
}
}
第一个问题是变量/对象范围...
class BottomView: UIView {
private var shadowLayer: CAShapeLayer!
override func layoutSubviews() {
super.layoutSubviews()
if shadowLayer == nil {
let shadowLayer = CAShapeLayer()
...
你说:let shadowLayer = CAShapeLayer()
,你刚刚创建了一个 新的本地 shadowLayer
对象,并且它在超出范围时消失(在 if
块的末尾)。
将该行更改为:
shadowLayer = CAShapeLayer() // remove the let
你应该会看到自己的影子。
您可以 "automate" 调整大小,方法是在 if
块下方添加:
if shadowLayer != nil {
shadowLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height), cornerRadius: 9).cgPath
}
这将在视图更改大小时随时重新调整阴影层的大小。