ios给 UIView 添加阴影

给 UIView 添加阴影有时候明明添加了阴影但是在 UI 上却没显示出来,这里总结几条阴影不显示的缘由:

1. 是否设置了 masksToBounds 为 YES,设置为 masksToBounds=YES,阴影不显示;
2. 设置阴影时 view 的 frame 是否为 CGRectZero,若是是,即便设置阴影后修改 frame 不为 CGRectZero 时,也不会显示阴影;
3. 使用自动布局时每每会遇到 frame 为 CGRectZero 时设置阴影无效,这时能够使用 `layoutIfNeeded` 方法;

【经过 layer 设置阴影】
// 阴影的颜色
self.imageView.layer.shadowColor = [UIColor blackColor].CGColor;
self.imageView.layer.shadowOpacity = 0.8;
// 阴影的圆角
self.imageView.layer.shadowRadius = 1;
// 阴影偏离的位置 (100, 50) x 方向偏离 100,y 偏离 50 正向,若是是负数正好为相反的方向
self.imageView.layer.shadowOffset = CGSizeMake(3, 4);

【经过 shadowPath 设置阴影】

经过这种方式设置的阴影能够自定义阴影的形状,它会使用在 layer 上设置的属性,好比 shadowRadius。

UIEdgeInsets edges = UIEdgeInsetsMake(15, 10, 15, 10);
UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(-edges.left, -edges.top, CGRectGetWidth(self.imageView.frame) + edges.left + edges.right, CGRectGetHeight(self.imageView.frame) + edges.top + edges.bottom)];
self.imageView.layer.shadowPath = path.CGPath;布局