CALayer(二)创建新图层

UIView内部有一个图层,通过访问UIView的layer属性能够访问UIView的图层,进入UIView的头文件查看layer属性,

@property(nonatomic,readonly,retain)                 CALayer  *layer; 
发现layer是只读属性,换言之,UIView内部的图层不能被修改,但是我们可以在该图层上面添加子图层。

在UIView内部添加子View用addSubView,类似的,在图层内部添加子图层用addSubLayer

一、添加一个基本图层

    // 创建一个新图层
    CALayer *layer = [[CALayer alloc] init];
//    CALayer *layer = [CALayer layer];
    
    // 设置图层大小尺寸
    layer.bounds = CGRectMake(0, 0, 100, 100);
    // 设置在父图层的位置
    layer.position = CGPointMake(200, 100);
    // 设置背景颜色
    layer.backgroundColor = [UIColor redColor].CGColor;
    // 设置圆角
    layer.cornerRadius = 20;
    // 设置阴影
    layer.shadowOffset = CGSizeMake(20, 10);
    layer.shadowColor = [UIColor lightGrayColor].CGColor;
    layer.shadowOpacity = 0.5;
    // 把新建的图层添加在父图层上
    [self.view.layer addSublayer:layer];

效果图



二、添加一个现实图片的图层

    // 创建一个新图层
    CALayer *layer = [[CALayer alloc] init];
    //    CALayer *layer = [CALayer layer];
    
    // 设置图层大小尺寸
    layer.bounds = CGRectMake(0, 0, 100, 100);
    // 设置在父图层的位置
    layer.position = CGPointMake(200, 100);

    // 图层的内容,必须为CoreGraphics框架的类型对象
    layer.contents = (id)[UIImage imageNamed:@"WoodPerson"].CGImage;
    
    // 设置圆角
    layer.cornerRadius = 20;
    layer.masksToBounds = YES; // 要使contens显示的内容有圆角,masksToBounds = YES

    [self.view.layer addSublayer:layer];

效果图

三、CALayer的两个重要属性

@property CGPoint anchorPoint; // 锚点,定位点,(以自己的左上角为坐标原点(0,0), x/y取值范围为0~1.0, 默认值为{0.5, 0.5})

@property CGPoint position;  // 子层在父图层的位置 (以父图层的左上角为坐标原点(0,0))

一个图层那么大,到底哪一个点在posintion的位置呢?这就由anchorPoint属性来决定, anchorPoint属性决定图层上的哪一个点在父图层position的位置。

    CALayer *layer = [[CALayer alloc] init];
    
    // 设置图层大小尺寸
    layer.bounds = CGRectMake(0, 0, 100, 100);
    // 设置在父图层的位置
    layer.position = CGPointMake(100, 100);
    layer.contents = (id)[UIImage imageNamed:@"WoodPerson"].CGImage;
    
//    layer.anchorPoint = CGPointMake(0, 0);
//    layer.anchorPoint = CGPointMake(1, 1);
    
    [self.view.layer addSublayer:layer];
默认值时,既anchorPoint = CGPointMake(0.5, 0.5);图层上(50, 50)点在position位置,显示效果图


anchorPoint = CGPointMake(0, 0);图层上(0, 0)点在position位置,显示效果图



anchorPoint = CGPointMake(1, 1);图层上(0, 0)点在position位置,显示效果图





四、UIView和UIView内部图层的其他关系

1、UIView可以通过subviews属性访问所有的子视图,类似地,CALayer也可以通过sublayers属性访问所有的子层

2、UIView可以通过superview属性访问父视图,类似地,CALayer也可以通过superlayer属性访问父层

3、如果两个UIView是父子关系,那么它们内部的CALayer也是父子关系。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值