简体   繁体   English

如何在Swift 3中为UIView提供底影?

[英]How to give bottom shadow to UIView in Swift 3?

在此输入图像描述

This I want 这就是我想要的

在此输入图像描述

My Code 我的守则

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

I want to implement exactly same shadow in my UIVIew. 我想在我的UIVIew中实现完全相同的阴影。 When I run my app with above code it spread over 4 sides. 当我使用上面的代码运行我的应用程序时,它分布在4个方面。 Notice : the shadow thin at both edges and bold at centre. 注意:阴影在两边都很薄,在中心处是粗体。

Try creating custom path: 尝试创建自定义路径:

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

This gives similiar results, try to customize points positions and other values to match your needs. 这会给出类似的结果,尝试自定义点位置和其他值以满足您的需求。

Slight change to @jonaszmclaren to give a rectangular shadow: 略微改变@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
}

Try This out 试试吧

IBOutlet IBOutlet中

@IBOutlet weak var vwShadow: UIView!

In ViewdidLoad 在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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM