虽然之前的回答可以在较低的 shadowRadius
下工作,但实际上并没有真正地实现“阴影”效果。
你可以使用 UIBezierPath
仅在底部添加阴影。
方法如下 -
let shadowWidth: CGFloat = 1.2
let shadowHeight: CGFloat = 0.3
let shadowRadius: CGFloat = 5
let width = someView.frame.width
let height = someView.frame.height
let shadowPath = UIBezierPath()
shadowPath.move(to: CGPoint(x: shadowRadius / 2, y: height - shadowRadius / 2))
shadowPath.addLine(to: CGPoint(x: width - shadowRadius / 2, y: height - shadowRadius / 2))
shadowPath.addLine(to: CGPoint(x: width * shadowWidth, y: height + (height * shadowHeight)))
shadowPath.addLine(to: CGPoint(x: width * -(shadowWidth - 1), y: height + (height * shadowHeight)))
someView.layer.shadowPath = shadowPath.cgPath
someView.layer.shadowRadius = shadowRadius
someView.layer.shadowOffset = .zero
someView.layer.shadowOpacity = 0.2
这将输出以下内容
![输入图像描述](https://istack.dev59.com/QywBC.webp)
或者如果你想要一个更简单的解决方案,带有较少选项,你可以选择这个
let buttonHeight = someButton.frame.height
let buttonWidth = someButton.frame.width
let shadowSize: CGFloat = 15
let contactRect = CGRect(x: -shadowSize, y: buttonHeight - (shadowSize * 0.2), width: buttonWidth + shadowSize * 2, height: shadowSize)
someButton.layer.shadowPath = UIBezierPath(ovalIn: contactRect).cgPath
someButton.layer.shadowRadius = 5
someButton.layer.shadowOpacity = 0.6
这将输出以下内容
![输入图像描述](https://istack.dev59.com/9Ws15.webp)
示例在此处
https://github.com/hemo87/ExampleShadow/tree/master