内阴影效果的UIView

问题描述:

我想内阴影添加到该的UILabel内阴影效果的UIView

图片:

picture

参考形式Inner shadow effect on UIView layer?

let display = UILabel() 

func setBackgroundLayer() { 
    let backgroundLayer = CAGradientLayer() 
    backgroundLayer.frame = view.bounds 
    backgroundLayer.colors = [UIColor(white:1,alpha:0.5).cgColor,UIColor(white:0.5,alpha:0.5).cgColor] 
    view.layer.insertSublayer(backgroundLayer, at: 0) 
} 

func setDisplay() { 
    let Xratio = view.bounds.width/8 
    display.frame = CGRect(x:Xratio,y:80,width:Xratio*6,height:Xratio*2) 
    display.backgroundColor = UIColor(red:204/255,green:203/255,blue:181/255,alpha:1) 
    view.addSubview(display) 

} 

func displayInnerShadow() { 


    let shadowLayer = CAShapeLayer() 
    shadowLayer.frame = view.bounds 

    let path = CGMutablePath() 
    path.addRect(display.frame.insetBy(dx: -20, dy: -20)) 
    path.addRect(display.frame) 


    shadowLayer.fillRule = kCAFillRuleEvenOdd 
    shadowLayer.path = path 

    shadowLayer.shadowColor = UIColor(white:0,alpha:1).cgColor 
    shadowLayer.shadowOffset = CGSize(width:0,height:0) 
    shadowLayer.shadowOpacity = 1 
    shadowLayer.shadowRadius = 5 

    view.layer.insertSublayer(shadowLayer, at: 1) 

} 



override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    setBackgroundLayer() 
    setDisplay() 
    //displayInnerShadow() 
} 

我得到了这样的结果:

result picture

为什么它不工作,以及如何设置填充颜色?

+0

“我想内阴影添加到此的UILabel”哪里是标签? –

+0

对不起,,该的UILabel只是绿色矩形的PIC – jin

试试这个

let display = UILabel() 

func setBackgroundLayer() { 
    let backgroundLayer = CAGradientLayer() 
    backgroundLayer.frame = view.bounds 
    backgroundLayer.colors = [UIColor(white:1,alpha:0.5).cgColor,UIColor(white:0.5,alpha:0.5).cgColor] 
    view.layer.insertSublayer(backgroundLayer, at: 0) 
} 

func setDisplay() { 
    let Xratio = view.bounds.width/8 
    display.frame = CGRect(x:Xratio,y:80,width:Xratio*6,height:Xratio*2) 

集层的背景颜色,而不是display.backgroundColor

display.layer.backgroundColor = UIColor(red:204/255,green:203/255,blue:181/255,alpha:1).cgColor 
    view.addSubview(display) 

} 

func displayInnerShadow() { 

    let innerShadowLayer = CALayer() 
    innerShadowLayer.frame = display.bounds 
    let path = UIBezierPath(rect: innerShadowLayer.bounds.insetBy(dx: -20, dy: -20)) 
    let innerPart = UIBezierPath(rect: innerShadowLayer.bounds).reversing() 
    path.append(innerPart) 
    innerShadowLayer.shadowPath = path.cgPath 
    innerShadowLayer.masksToBounds = true 
    innerShadowLayer.shadowColor = UIColor.black.cgColor 
    innerShadowLayer.shadowOffset = CGSize.zero 
    innerShadowLayer.shadowOpacity = 1 
    innerShadowLayer.shadowRadius = 5 
    display.layer.addSublayer(innerShadowLayer) 
} 


override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    setDisplay() 
    setBackgroundLayer() 
    displayInnerShadow() 

} 
+0

感谢,,头被埋图为何,但你可以展现与实施答案后的代码仍然不工作只是显示第一张图和没有影子 – jin

+0

? –

+0

我更新的问题,我复制你回答,改变“标签”,以“显示” – jin