iOS——CALayer的shadow无效问题

CALayer *sublayer = [CALayer layer];
    sublayer.backgroundColor = [UIColor purpleColor].CGColor;
    sublayer.shadowOffset = CGSizeMake(0, 3);
    sublayer.shadowRadius = 5.0;
    sublayer.shadowColor = [UIColor blackColor].CGColor;
    sublayer.shadowOpacity = 0.8;
    sublayer.frame = CGRectMake(30, 30, 128, 192);
    sublayer.borderColor = [UIColor blackColor].CGColor;
    sublayer.borderWidth = 2.0;
    sublayer.cornerRadius = 10.0;
    [self.view.layer addSublayer:sublayer];

    CALayer *imageLayer = [CALayer layer];
    imageLayer.frame = sublayer.bounds;
    imageLayer.cornerRadius = 10.0;
    imageLayer.contents = (id)[UIImage imageNamed:@"snaguosha.png"].CGImage;
    imageLayer.masksToBounds = YES;
    [sublayer addSublayer:imageLayer];

    CALayer *customDrawn = [CALayer layer];
    customDrawn.delegate = self;
    customDrawn.backgroundColor = [UIColor greenColor].CGColor;
    customDrawn.frame = CGRectMake(30, 250, 280, 200);
    customDrawn.shadowOffset = CGSizeMake(0, 3);
    customDrawn.shadowRadius = 5.0;
    customDrawn.shadowColor = [UIColor blackColor].CGColor;
    customDrawn.shadowOpacity = 1;
    customDrawn.cornerRadius = 10.0;
    customDrawn.borderColor = [UIColor blackColor].CGColor;
    customDrawn.borderWidth = 2.0;
    customDrawn.masksToBounds = YES;
    [self.view.layer addSublayer:customDrawn];
    [customDrawn setNeedsDisplay];

以上代码预览如下:

可以看到下方的部分没有阴影,Why?看了半天也没看出什么不一样,后来发现是因为customDrawn.masksToBounds = YES;这句代码导然不存在,如果去掉这行代码会是这样的:

阴影出来了,但是圆角没了。解决办法很简单,像上面图片的方式,里面套一层,masksToBounds作用在里层,外层显示阴影

时间: 2024-10-10 03:52:12

iOS——CALayer的shadow无效问题的相关文章

iOS CALayer讲解

iOS CALayer讲解 分类: CALayer2014-09-09 13:57 450人阅读 评论(0) 收藏 举报 CALayer 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 @pro

IOS CALayer(二)

UIview内部有个默认的CALayer对象层,虽然我门不可以重新创建它,但是我门可以再其上面添加子层. 我们知道,UIView有 addSubview:方法,同样,CALayer也有addSublayer:方法.我门可以通过addSublayer:再已有layer上添加自层. 下面我门演示如何添加自层. // // ViewController.m // CX - CALayer(二) // // Created by ma c on 16/3/19. // Copyright ? 2016年

iOS CALayer视图图层

在iOS中都会牵扯到图形转换,动画效果,添加视图,等等的一系列问题,在设计页面,设计图形,添加动画的时候都会使用到这个知识. 简单的说他就是视图的图层,但又不是视图,因为视图可以和用户交互,添加响应事件,添加视图等等,但是CALayer并不可以添加响应事件等等,它只是一个视图的图层,就是这个图片的显示层,展示层,只能够显示内容,比如展示背景颜色,展示图片,设置边框,等等. UIView上面的rootLayer 发生改变的话 子图层也会发生变化 如果想要改变 button的视图形状边框等,要改变的

iOS -- CALayer之简单的使用

一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个图标等等,这些都是UIView. 其实UIView之所以能够显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层. 当UIView需要显示到屏幕时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了U

ios 11禁止访问无效证书的https

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #000000 } span.s1 { } span.s2 { font: 11.0px Menlo } 此服务器的证书无效.您可能正在连接到一个伪装成"merch.hrtpayment.com"的服务器,这会威胁到您的机密信息的安全.

iOS:CALayer锚点的使用

CALayer层的位置主要和position和anchorPoint有关.其中它们在一起才能决定层在视图中的具体位置. @property CGPoint position;         //位置 @property CGPoint anchorPoint;  //锚点 锚点的范围:(0.0~1.0) 具体的演示如下: 1.采用默认的锚点(0.5,0.5) - (void)viewDidLoad { [super viewDidLoad]; //添加子层 CALayer *subLayer

iOS CALayer使用

一. 简介 1.CALayer一般作为UIView的容器 2.是一个管理图片载体的层架构 3.直接修改创建的CALayer可以触发隐藏动画 4.UIView的CALayer动画必须显示触发 二. 应用 1.修改uiview的layer相当于直接修改uiview,例如 UIView *test = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; test.layer.frame = CGRectMake(100, 100

iOS CALayer 抖动效果

方式一 1 - (void)shakeAnimationForView:(UIView *)view 2 { 3 CALayer *layer = [view layer]; 4 CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; 5 animation.keyPath = @"position.x"; 6 animation.values = @[ @0, @5, @10, @-10, @10, @5,

ios CALayer之图片剪切2

1 /**/ 2 // 设置layer边框 3 self.customView.layer.borderWidth = 10; 4 // 设置layer边框颜色 5 self.customView.layer.borderColor =[UIColor blackColor].CGColor; 6 // 设置layer的圆角(设置主图层的圆角) 7 self.customView.layer.cornerRadius = 10; 8 self.customView.layer.bounds =