UIView兼容阴影和圆角

由于设置阴影需要masksToBounds设置为NO,而设置圆角需要masksToBounds为YES,因此相互矛盾,不能用一般法解决。

设原来要显示的view为exhibitView

1.需要将当前要展示的UIView加在一个新的UIView,暂且叫做shadowView,将其设置阴影
初始化

- (UIView *)shadowView{
    if (_shadowViewForHeadPicture == nil) {

        //shadowView
        _shadowView = [[UIView alloc]init];
        //不设置frame的话,不能子视图的点击事件,但也可以正常显示视图,另外设置的frame一定要将子视图包含在内
        _shadowView = CGRectMake(0, 0, WIDTH, HEIGHT/2);
        _shadowView =  [UIColor colorWithRed:203.0/255 green:231.0/255 blue:247.0/255 alpha:1].CGColor;
 _shadowView.layer.masksToBounds= NO;//默认是NO
        _shadowView.layer.shadowOffset = CGSizeMake(0, 5);
        _shadowView.layer.shadowRadius = 20 ;
        _shadowView.layer.shadowOpacity = 1;
        _shadowView.layer.shouldRasterize = YES;
    }
    return _shadowView;
}

将它加在父视图上

[self addSubview:self.shadowView];

然后再用这个_shadowView添加本来要显示的视图

 [self.shadowView addSubview:exhibitView];

2.在要展示的exhibitView再设置圆角,并让

exhibitView.layer.masksToBounds= YES;

效果可参考下图白色的圆形View
UIView兼容阴影和圆角_第1张图片

你可能感兴趣的:(iOS)