如何在Swift 3中为UIView添加底部阴影?

4

这是我想要的图片

这是我想要的

我的代码

我的代码

let shadowPath = UIBezierPath(rect: shadowView.bounds).cgPath
shadowView.layer.shadowColor = UIColor.grey.cgColor
shadowView.layer.shadowOffset = CGSize(width: 0, height: 1)
shadowView.layer.shadowOpacity = 0.5
shadowView.layer.masksToBounds = false
shadowView.layer.shadowPath = shadowPath
shadowView.layer.shadowRadius = 5

我想在我的UIVIew中实现与上述代码完全相同的阴影效果。但是,当我运行应用程序时,阴影会扩散到四个方向。请注意:阴影在两侧变薄,在中心变粗。

你的阴影应该是红色的吗?我找不到红色颜色。 - Prashant Tukadiya
你看到什么颜色?我将不透明度设置为0.5,不关心颜色。 - Alwin
图片周围的灰色边框? - Prashant Tukadiya
我想要构建阴影形状,而不是颜色。 - Alwin
@Alwin 你可以让你的设计师获取那种特定类型的图像(黑色曲线),然后从我们这边使用 imageview 并在主图像下方显示该图像。对于用户来说,这并没有任何区别。 - dahiya_boy
显示剩余3条评论
3个回答

12

尝试创建自定义路径:

let shadowPath = UIBezierPath()
shadowPath.move(to: CGPoint(x: someView.bounds.origin.x, y: someView.frame.size.height))
shadowPath.addLine(to: CGPoint(x: someView.bounds.width / 2, y: someView.bounds.height + 7.0))
shadowPath.addLine(to: CGPoint(x: someView.bounds.width, y: someView.bounds.height))
shadowPath.close()

shadowView.layer.shadowColor = UIColor.darkGray.cgColor
shadowView.layer.shadowOpacity = 1
shadowView.layer.masksToBounds = false
shadowView.layer.shadowPath = shadowPath.cgPath
shadowView.layer.shadowRadius = 5

这会产生类似的结果,尝试自定义点的位置和其他值以适应您的需求。


3

稍微修改一下 @jonaszmclaren,以使其具有矩形阴影:

func makeBottomShadow(forView view: UIView, shadowHeight: CGFloat = 5) {
    let shadowPath = UIBezierPath()
    shadowPath.move(to: CGPoint(x: 0, y: view.bounds.height))
    shadowPath.addLine(to: CGPoint(x: view.bounds.width, y: view.bounds.height))
    shadowPath.addLine(to: CGPoint(x: view.bounds.width, y: view.bounds.height + shadowHeight))
    shadowPath.addLine(to: CGPoint(x: 0, y: view.bounds.height + shadowHeight))
    shadowPath.close()

    view.layer.shadowColor = UIColor.darkGray.cgColor
    view.layer.shadowOpacity = 0.5
    view.layer.masksToBounds = false
    view.layer.shadowPath = shadowPath.cgPath
    view.layer.shadowRadius = 2
}

2

Try This out

IBOutlet

@IBOutlet weak var vwShadow: UIView!

在ViewdidLoad中

vwShadow.layer.shadowColor = UIColor.gray.cgColor
vwShadow.layer.masksToBounds = false
vwShadow.layer.shadowOffset = CGSize(width: 0.0 , height: 5.0)
vwShadow.layer.shadowOpacity = 1.0
vwShadow.layer.shadowRadius = 1.0

这不是我想要的。 - Alwin
正如您之前所说,您想在底部阴影显示视图。这是相应的代码片段。 - arpita
我只想要底部的阴影。你的代码会稍微向右、左和上方扩散阴影,这不是我需要的。 - Alwin
可以通过编程实现这一点。@jonaszmclaren 帮助我实现了这个目标。 - Alwin
这将为所有4个边添加阴影。 - Neeraj Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接