【问题标题】:Add shadow to a UIView with layer向带有图层的 UIView 添加阴影
【发布时间】:2017-10-17 12:57:45
【问题描述】:

我正在尝试为具有图层和渐变的视图添加阴影。按照我能够意识到的:

1) 路径

let path = UIBezierPath()
path.move(to: CGPoint(x: myView.frame.minX, y: myView.frame.minY))
path.addLine(to: CGPoint(x: myView.frame.minX, y: myView.frame.maxY))
path.addLine(to: CGPoint(x: myView.frame.maxX, y: 171))
path.addLine(to: CGPoint(x: myView.frame.maxX, y: myView.frame.minY))
path.close()

2) 形状

let shape = CAShapeLayer()
shape.path = path.cgPath

3) 渐变和阴影

let gradient = CAGradientLayer()
gradient.frame = myView.bounds
gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
gradient.startPoint = CGPoint(x: 0, y: 0)
gradient.endPoint = CGPoint(x: 1, y: 1)

let shadow = CALayer()
shadow.shadowPath = path.cgPath
shadow.shadowColor = UIColor.black.cgColor
shadow.shadowOffset = CGSize.zero
shadow.shadowOpacity = 0.5

4) 将所有层作为我的视图的子层

self.myView.layer.addSublayer(shape)
self.myView.layer.addSublayer(gradient)
self.myView.layer.addSublayer(shadow)
self.myView.layer.mask = shape

模拟器向我显示的内容:什么?!?!阴影放置在视图上,而不是下方!!!

我能做些什么来解决它?我的最终目的是将阴影放在视图下方(如红线)。

【问题讨论】:

    标签: swift calayer layer shadow cashapelayer


    【解决方案1】:

    你也应该指定阴影半径。

    shadow.shadowRadius = 5
    

    【讨论】:

    • 我忘了指定阴影半径,但是即使这样做了阴影也没有固定
    • 尝试使用 shadow.maskToBounds = false
    • 删除这一行.. self.myView.layer.mask = shape
    • 不...阴影被喷射叠加到视图中,但这一次被切割为形状...
    【解决方案2】:

    3) 将形状设置为渐变的蒙版。设置阴影为myView.layer

    let gradient = CAGradientLayer()
    gradient.frame = myView.bounds
    gradient.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
    gradient.startPoint = CGPoint(x: 0, y: 0)
    gradient.endPoint = CGPoint(x: 1, y: 1)
    gradient.mask = shape // <-- 1
    
    let shadow = myView.layer // <-- 2
    shadow.shadowPath = path.cgPath
    shadow.shadowColor = UIColor.black.cgColor
    shadow.shadowOffset = CGSize.zero
    shadow.shadowOpacity = 0.5
    

    4) 只需将渐变作为myView.layer的子层即可

    self.myView.layer.addSublayer(gradient) // <-- 3
    

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2017-07-31
      • 1970-01-01
      • 2018-11-06
      相关资源
      最近更新 更多