UI设计师有时候希望我们的产品比较酷。
阴影是他们喜欢的效果之一。
怎么设置阴影呢?
1、设置一个四边都相同的阴影
- UIImageView *testImgView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 200, 100)];
-
- [testImgView setBackgroundColor:[UIColor yellowColor]];
-
- // 阴影颜色
- testImgView.layer.shadowColor = [UIColor blackColor].CGColor;
- // 阴影偏移,默认(0, -3)
- testImgView.layer.shadowOffset = CGSizeMake(0,0);
- // 阴影透明度,默认0
- testImgView.layer.shadowOpacity = 0.5;
- // 阴影半径,默认3
- testImgView.layer.shadowRadius = 5;
-
- [self.view addSubview:testImgView];
-
效果如图:

2、设置单边阴影
- //单边阴影
-
- UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 300, 200, 100)];
-
- [testLabel setBackgroundColor:[UIColor yellowColor]];
-
- // 阴影颜色
- testLabel.layer.shadowColor = [UIColor blackColor].CGColor;
-
- // 阴影偏移,默认(0, -3)
- testLabel.layer.shadowOffset = CGSizeMake(0,0);
-
- // 阴影透明度,默认0
- testLabel.layer.shadowOpacity = 0.5;
- // 阴影半径,默认3
- testLabel.layer.shadowRadius = 5;
-
- // 单边阴影 顶边
- float shadowPathWidth = testLabel.layer.shadowRadius;
- CGRect shadowRect = CGRectMake(-shadowPathWidth/2.0, 0-shadowPathWidth/2.0, testLabel.bounds.size.width+shadowPathWidth, shadowPathWidth);
- UIBezierPath *path = [UIBezierPath bezierPathWithRect:shadowRect];
- testLabel.layer.shadowPath = path.CGPath;
-
- [self.view addSubview:testLabel];
效果如下:

3、和阴影相关的属性
- /** Shadow properties. **/
-
- /* The color of the shadow. Defaults to opaque black. Colors created
- * from patterns are currently NOT supported. Animatable. */
- @property(nullable) CGColorRef shadowColor;
- /* The opacity of the shadow. Defaults to 0. Specifying a value outside the
- * [0,1] range will give undefined results. Animatable. */
- @property float shadowOpacity;
- /* The shadow offset. Defaults to (0, -3). Animatable. */
- @property CGSize shadowOffset;
- /* The blur radius used to create the shadow. Defaults to 3. Animatable. */
- @property CGFloat shadowRadius;
- /* When non-null this path defines the outline used to construct the
- * layer's shadow instead of using the layer's composited alpha
- * channel. The path is rendered using the non-zero winding rule.
- * Specifying the path explicitly using this property will usually
- * improve rendering performance, as will sharing the same path
- * reference across multiple layers. Upon assignment the path is copied.
- * Defaults to null. Animatable. */
- @property(nullable) CGPathRef shadowPath;