美文网首页
UIView圆角与阴影的关系

UIView圆角与阴影的关系

作者: whbsspu | 来源:发表于2017-03-07 22:29 被阅读58次

    今天在工作中遇到一个问题,如何给已经设置圆角的view添加阴影效果。通常我们的做法是这样的:

       UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        view.backgroundColor = [UIColor redColor];
      
        // 设置圆角
        view.layer.cornerRadius = 6;
        view.layer.masksToBounds = YES;
        
        // 设置阴影
        view.layer.shadowRadius = 6;
        view.layer.shadowOffset = CGSizeMake(0,2);
        view.layer.shadowColor = [UIColor blueColor].CGColor;
        view.layer.shadowOpacity = 0.8;
    

    但是显示的效果并非我们期望的那样:


    4A356817-C3F4-4F05-90B6-8AF983750683.png

    为什么设置的阴影效果没有作用呢?
    先理解setMasksToBounds的含义,setMasksToBounds表示对frame外的内容进行了裁减,只可显示frame内的内容。由于这种方法加的阴影在frame外,所以被裁减了。
    如果想要达到即设置了圆角又设置阴影的效果,可以先把已经设置圆角的view1添加到view2中,view2的frame和view1相同。然后设置view2的阴影效果,这样便可以在视觉上看上去view1设置了圆角及阴影。具体代码如下:

       UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
        view1.backgroundColor = [UIColor redColor];
        view1.layer.cornerRadius = 6;
        view1.layer.masksToBounds = YES;
        
        UIView *view2 = [[UIView alloc]initWithFrame:view1.bounds];
        [view2 addSubview:view1];
        view2.layer.shadowRadius = 6;
        view2.layer.shadowOffset = CGSizeMake(0,2);
        view2.layer.shadowColor = [UIColor blueColor].CGColor;
        view2.layer.shadowOpacity = 0.8;
    

    效果如下:

    0E5983F6-6DEF-42E3-ACB6-1B6984A7049E.png

    相关文章

      网友评论

          本文标题:UIView圆角与阴影的关系

          本文链接:https://www.haomeiwen.com/subject/nvsvgttx.html