原理:正常情况下是在一个图层上既设置icon,也设置阴影就能达到要求;但是这样做会发现阴影不见了...。原因是设置圆形图层需要把暴露在该图层外的子图层部分切割掉( self.iconLayer.masksToBounds = YES;) 在设置图片时会重新绘制一个图层来装图片(被切割后就变成圆的了),而阴影自然也是属于在该图层外的部分,顺理成章的也被切割掉了.... 。所以要同时实现这两个功能,可以换一个角度想:设置两个图层,一个专门装圆形图片,一个专门装圆形图片的阴影部分。
#import "ViewController.h"
#define IconWidth 150
@interface ViewController ()
@property (nonatomic,strong) CALayer *iconLayer;
@property (nonatomic,strong) CALayer *shadowLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
self.view.backgroundColor = [UIColorwhiteColor];
self.shadowLayer = [CALayerlayer];
self.shadowLayer.bounds =CGRectMake(0,0, IconWidth,IconWidth);
注:设置阴影层的时候一定要设置backgroundColor,不设置的话不会显示阴影(原因还没查到....).
self.shadowLayer.backgroundColor = [UIColorwhiteColor].CGColor;
self.shadowLayer.cornerRadius =IconWidth/2.0f;
self.shadowLayer.position =self.view.center;
self.shadowLayer.shadowColor = [UIColorblackColor].CGColor;
self.shadowLayer.shadowOffset =CGSizeMake(4.0f,4.0f);
self.shadowLayer.shadowOpacity =0.8f;
[self.view.layeraddSublayer:self.shadowLayer];
self.iconLayer = [CALayerlayer];
self.iconLayer.contents = (__bridgeid _Nullable)([UIImageimageNamed:@"start.jpeg"].CGImage);
self.iconLayer.bounds =CGRectMake(0,0, IconWidth,IconWidth);
self.iconLayer.position =self.shadowLayer.position;
self.iconLayer.cornerRadius =IconWidth/2.0f;
self.iconLayer.masksToBounds =YES;
[self.view.layeraddSublayer:self.iconLayer];
}
@end
效果图: