美文网首页
iOS UIView设置阴影.md

iOS UIView设置阴影.md

作者: 儒徒 | 来源:发表于2020-08-06 16:52 被阅读0次

这里采用的途径是CALayer的shadow属性:

  • shadowColor: 阴影颜色, 类CGColorRef
  • shadowOpacity:阴影透明度, 取值0~1.
  • shadowOffset:阴影偏移量, 是相对iOS左上角的坐标系而言, 默认值: CGSizeMake(0,-3).
  • shadowRadius:阴影半径, 默认值CGFloat=3.
  • shadowPath:阴影路径, CGPathRef.

一、常用实现方式有以下两种:

方式一:指定阴影路径shadowPath,推荐
方式二:不指定阴影路径shadowPaht.(若存在大量的阴影,影响性能.)

二、指定shadowPath实现

- (void)drawShadow
{
    UIView *parentView  = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 200, 200)];
    [self.view addSubview:parentView];
    parentView.backgroundColor = [UIColor whiteColor];
    
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(40, 40, 80, 40)];
    [btn setTitle:@"hello" forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [parentView addSubview:btn];
    btn.layer.borderWidth = 1;
    btn.layer.borderColor = [UIColor blackColor].CGColor;
    //阴影
    btn.layer.masksToBounds = YES;//默认值为NO。不能设置为YES,否则阴影无法出现。
    btn.layer.shadowColor = [UIColor redColor].CGColor;
    btn.layer.shadowOpacity = 0.5;//阴影透明度,默认0
    btn.layer.shadowRadius = 4;//阴影圆角
    btn.layer.shadowOffset = CGSizeMake(0, 0);    //阴影偏移量。有值是向下向右偏移。
    

    /*
     * 默认值:(0,-3)向上偏移。
       原因:阴影最先在mac平台实现,默认是向下偏移3。但由于iOS和macOS的Y轴相反,所以,iOS是向上偏移3.
     
       设置为:(0,0),四周都有阴影。
     */
    //阴影路径
    btn.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:btn.bounds cornerRadius:btn.layer.cornerRadius].CGPath;
    
    
}

三、常见属性

设置layer的masksToBounds = YES;(阴影无法显示)
maskToBounds=YES.png=20x20
clipsToBounds: 指视图上的子视图,如果超出父视图的部分就截取掉.
masksToBounds: 指视图的图层上的子图层,如果超出父图层的部分就截取掉.
     所以如果要设置阴影: masksToBounds = NO;

⚠️: layer的shadow属性mask属性存在冲突, 所以才有上面的问题. 如果要想layer的shadow属性mask属性共存, 则是新建一个layer赋予mask属性, 并将其embed第二个layer(带有shadow属性), 两个layer的bounds相等

UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(40, 300, 100, 40)];
    shadowView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:shadowView];
    ///layer带有shadow属性
    shadowView.layer.shadowColor = [UIColor redColor].CGColor;
    shadowView.layer.shadowOpacity = 1.0f;
    shadowView.layer.shadowRadius = 10;
    shadowView.layer.shadowOffset = CGSizeMake(4, 4);
    shadowView.layer.cornerRadius = 5;
    
    //mask不生效.
//    shadowView.layer.masksToBounds = YES;
    
    ///maskLayer带有mask属性, 并嵌入到shaowLayer
    CALayer *maskLayer = [CALayer layer];
    maskLayer.frame = shadowView.layer.bounds;
    maskLayer.masksToBounds = YES;
    [shadowView.layer addSublayer:maskLayer];
image.png
shadowOffset
  • shadowOffset = CGSizeMake(0, -3)
    ⚠️: 至于为什么默认值是CGSizeMake(0, -3)第一个代码注释中有说明.
    offset=0和-6.png
  • shadowOffset = CGSizeMake(0, 0)


    offset=0和0.png

相关文章

  • iOS UIView设置阴影.md

    一、常用实现方式有以下两种: 方式一:指定阴影路径shadowPath,推荐方式二:不指定阴影路径shadowPa...

  • UIView,UIButton,UIImageView等设立

    UIView,UIButton,UIImageView等设置圆角,设置阴影,设置边框的方法 在iOS开发中,任何可...

  • iOS设置UIView阴影

    masksToBoundslayer对子layer进行切割,为true后切割后,阴影就看不到了。 shadowOf...

  • iOS阴影设置详解

    UIView的阴影设置主要通过UIView的layer的相关属性来设置 阴影的颜色 阴影的透明度 阴影的圆角 阴影...

  • UIView加阴影

    UIView的阴影设置主要通过UIView的layer的相关属性来设置 阴影的颜色 阴影的透明度 阴影的圆角 阴影...

  • iOS UIView设置阴影效果

    做iOS开发的都会知道,给一个视图设置圆角只需要设置layer.cornerRadius,并masksToBoun...

  • iOS UIView设置局部阴影

    有时候,UI并不会给我们切带有阴影的图片,阴影就需要我们自己来做。(当然了,有图片是最好的) 举个栗子如图: 通过...

  • 为圆角View巧设阴影效果

    我们都知道,ios里可以通过UIView的layer属性为其设置圆角和阴影: 设置圆角: 注意:!!!上述两个...

  • iOS 圆角和阴影的一点采坑体会

    前提 iOS 对于UIView 圆角 和 阴影的设置一般都给予对layer的操作,通常做法为 圆角 阴影 二者的...

  • UIView设置阴影

    UIView设置阴影CALayer的属性: shadowColor, shadowOffset, shadowOp...

网友评论

      本文标题:iOS UIView设置阴影.md

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