簡體   English   中英

帶有遮罩的Shadow不適用於UIViewLayer

[英]Shadow doesn't work with UIViewLayer with a mask

我使用UIBezierPath僅在左上角和右上角實現了帶有圓角矩形的UIView。 但是之后,當我向視圖中添加陰影時,它不會顯示陰影。 如果我只是刪除貝塞爾曲線的圓角,則陰影效果非常好。 但是現在只有圓角出現而沒有任何陰影。 這是我的代碼

override func drawRect(rect: CGRect)
{
    super.drawRect(rect)

    let shapeLayer : CAShapeLayer = CAShapeLayer(layer: centerView.layer)
    shapeLayer.path = UIBezierPath(roundedRect: centerView.layer.bounds, byRoundingCorners: UIRectCorner.TopRight|UIRectCorner.TopLeft, cornerRadii: CGSizeMake(15,15)).CGPath
    centerView.layer.mask = shapeLayer

    centerView.layer.masksToBounds = false

    centerView.layer.shadowOffset = CGSizeMake(0,-2)
    centerView.layer.shadowRadius = 0.5
    centerView.layer.shadowOpacity = 0.7
    centerView.layer.shadowColor = UIColor(red: 0.867, green: 0.867, blue: 0.867, alpha: 1).CGColor
    centerView.layer.shadowPath =  UIBezierPath(roundedRect: centerView.layer.bounds, byRoundingCorners: UIRectCorner.TopRight|UIRectCorner.TopLeft, cornerRadii: CGSizeMake(15,15)).CGPath
}

在這里,我重寫了UITableViewCell的drawRect,而centerView是它的子視圖。 我也嘗試將UIView子類化為centerView,這似乎也不起作用。

CALayer的mask屬性和maskToBounds屬性是否相互沖突?

將遮罩層應用於視圖后,該視圖將被裁剪到遮罩層。 視圖的陰影也將被裁剪,因此不會被繪制。 解決此問題的常見方法是擁有2個視圖。 一種視圖用於投射陰影,另一種視圖用於蒙版。 在您的情況下,centerView是遮罩視圖,因為您將遮罩層設置為centerView層。 您需要做的是創建一個新視圖,我們將其稱為containerView。 將centerView添加到containerView,然后在容器視圖(而不是centerView)上設置陰影。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM