IOS 自定义Layer(图层)

方式1:
 
  
@interface NJViewController ()

@end

@implementation NJViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 如果一个控制是另外一个控件的子控件, 那么这个控件中的layer也是另外一个控件的子layer
//     NSLog(@"star - %@", self.view.layer.sublayers);
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.bounds = CGRectMake(0, 0, 100, 100);
//    layer.position = CGPointMake(200, 200);
//    layer.contents = (id)[UIImage imageNamed:@"me"].CGImage;
    [self.view.layer addSublayer:layer];

    
}

- (void)test
{
    
    NSLog(@"star - %@", self.view.layer.sublayers);
    
    // 1.创建layer
    //    CALayer *layer = [[CALayer alloc] init];
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [UIColor redColor].CGColor;
    layer.bounds = CGRectMake(0, 0, 100, 100);
    layer.position = CGPointMake(200, 200);
    layer.borderWidth = 10;
    layer.cornerRadius = 10;
    // 将layer添加在界面上
    [self.view.layer addSublayer:layer];
    
    //    NSLog(@"%@", layer.superlayer); // 获取layer的父视图
    NSLog(@"end - %@", self.view.layer.sublayers);
    
    
    //
    //    UIView *view = [[UIView alloc] init];
    //    view.superview;
    //    view.subviews;
    //    [self.view addSubview:view];
}

 方式2:

NJLayer.h / .m

@implementation NJLayer

// 重写该方法, 在该方法中给layer上绘制图形
// 注意CALayer中的drawInContext方法, 不会自动调用
// 只能自己通过setNeedDisplay方法调用
- (void)drawInContext:(CGContextRef)ctx
{

    // 1.绘制图形
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
    
//    [[UIColor redColor] set]; // 注意不能用UIKit框架中的类
    
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    // 1.渲染图形
    CGContextFillPath(ctx);
}

@end
View Code

调用

#import "NJLayer.h"

@interface NJViewController ()

@end

@implementation NJViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 1.创建自定义Layer
    CALayer *myLayer = [CALayer layer];
    myLayer.bounds = CGRectMake(0, 0, 100, 100);
    myLayer.anchorPoint = CGPointZero;
    myLayer.backgroundColor = [UIColor greenColor].CGColor;
    
    myLayer.delegate = self;
    
    // 1.1手动调用CALayer中的SETNEEDDISPLAY方法绘制图片
    [myLayer setNeedsDisplay];
    
    // 2.将自定义Layer添加到控制器的view的layer上
    [self.view.layer addSublayer:myLayer];
}

// 通过代理自定义layer
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    
    // 1.绘制图形
    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 100));

    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    // 1.渲染图形
    CGContextFillPath(ctx);
}


- (void)test
{
    // 1.创建自定义Layer
    NJLayer *myLayer = [NJLayer layer];
    
    myLayer.bounds = CGRectMake(0, 0, 100, 100);
    myLayer.anchorPoint = CGPointZero;
    myLayer.backgroundColor = [UIColor greenColor].CGColor;
    //    myLayer.position = CGPointMake(200, 200);
    
    // 1.1手动调用CALayer中的SETNEEDDISPLAY方法绘制图片
    [myLayer setNeedsDisplay];
    
    // 2.将自定义Layer添加到控制器的view的layer上
    [self.view.layer addSublayer:myLayer];
}
View Code

 

转载于:https://www.cnblogs.com/liuwj/p/6599329.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值