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(二)创建新图层_第1张图片


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

    // 创建一个新图层
    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(二)创建新图层_第2张图片

三、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位置,显示效果图

CALayer(二)创建新图层_第3张图片

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

CALayer(二)创建新图层_第4张图片


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

CALayer(二)创建新图层_第5张图片




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

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

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

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





你可能感兴趣的:(iOS)