我要怎样为我的UIView
顶部添加阴影?我尝试了以下方法,但都没有成功...
childView.layer.cornerRadius = 5;
childView.layer.masksToBounds = YES;
childView.layer.shadowOffset = CGSizeMake(-15, 20);
childView.layer.shadowRadius = 5;
childView.layer.shadowOpacity = 0.5;
我要怎样为我的UIView
顶部添加阴影?我尝试了以下方法,但都没有成功...
childView.layer.cornerRadius = 5;
childView.layer.masksToBounds = YES;
childView.layer.shadowOffset = CGSizeMake(-15, 20);
childView.layer.shadowRadius = 5;
childView.layer.shadowOpacity = 0.5;
Swift 3扩展:
这包括我正在开发的应用程序的默认值,但您可以更改它们以匹配您希望在应用程序中使用的样式。
enum VerticalLocation: String {
case bottom
case top
}
extension UIView {
func addShadow(location: VerticalLocation, color: UIColor = .black, opacity: Float = 0.5, radius: CGFloat = 5.0) {
switch location {
case .bottom:
addShadow(offset: CGSize(width: 0, height: 10), color: color, opacity: opacity, radius: radius)
case .top:
addShadow(offset: CGSize(width: 0, height: -10), color: color, opacity: opacity, radius: radius)
}
}
func addShadow(offset: CGSize, color: UIColor = .black, opacity: Float = 0.5, radius: CGFloat = 5.0) {
self.layer.masksToBounds = false
self.layer.shadowColor = color.cgColor
self.layer.shadowOffset = offset
self.layer.shadowOpacity = opacity
self.layer.shadowRadius = radius
}
}
为了使阴影效果显示出来,您需要将子视图的masksToBounds
属性设置为NO
。
childView.layer.masksToBounds = NO;
buttonBackgroundView.layer.shadowOpacity = 0.7
buttonBackgroundView.layer.shadowOffset = CGSize(width: 3, height: 3)
buttonBackgroundView.layer.shadowRadius = 15.0
buttonBackgroundView.layer.shadowColor = UIColor.black.cgColor
将masksToBounds = NO
设置为您的代码。如果masksToBounds是YES,您看不到阴影的原因是它完全隐藏在视图后面。
如果您的按钮是圆形的,则可以调整视图的imageEdgeInset值。例如:UIEdgeInsetsMake(5,0,0,10);
答案在UIBezierPath
中。
你可以在这里找到一篇非常有趣的文章: https://www.hackingwithswift.com/articles/155/advanced-uiview-shadow-effects-using-shadowpath
layer.shadowOffset = CGSize(width: 0, height: -2)
layer.shadowRadius = 5
layer.shadowPath = UIBezierPath(rect: CGRect(x: -1,
y: -1,
width: self.bounds.width,
height: self.layer.shadowRadius)).cgPath
CGSizeMake
中的y
值应该为负数。 - Gonzo