试试这个:
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:view.bounds];
view.layer.masksToBounds = NO;
view.layer.shadowColor = [UIColor blackColor].CGColor;
view.layer.shadowOffset = CGSizeMake(0.0f, 5.0f);
view.layer.shadowOpacity = 0.5f;
view.layer.shadowPath = shadowPath.CGPath;
First of all:用作shadowPath
的UIBezierPath
至关重要.如果你不使用它,一开始你可能没有注意到不同之处,但敏锐的眼睛会观察到在旋转设备和/或类似事件期间发生的某种滞后.这是一个重要的性能调整.
Regarding your issue specifically:重要的线路是view.layer.masksToBounds = NO
.它会禁用延伸到视图边界之外的the view's layer's sublayers的剪裁.
对于那些想知道masksToBounds
(在图层上)和视图自己的clipToBounds
属性之间的区别是什么的人来说:实际上没有.切换其中一个会对另一个产生影响.只是一个不同的抽象层次.
Swift 2.2:
override func layoutSubviews()
{
super.layoutSubviews()
let shadowPath = UIBezierPath(rect: bounds)
layer.masksToBounds = false
layer.shadowColor = UIColor.blackColor().CGColor
layer.shadowOffset = CGSizeMake(0.0, 5.0)
layer.shadowOpacity = 0.5
layer.shadowPath = shadowPath.CGPath
}
Swift 3:
override func layoutSubviews()
{
super.layoutSubviews()
let shadowPath = UIBezierPath(rect: bounds)
layer.masksToBounds = false
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0.0, height: 5.0)
layer.shadowOpacity = 0.5
layer.shadowPath = shadowPath.cgPath
}