【iOS开发-图层】自定义图层的两种方式

本文介绍了在iOS开发中自定义图层的两种方法:通过重写drawInContext方法和利用代理机制。在自定义图层时,可以初始化即显示图形。重写drawInContext后需调用setNeedsDisplay来触发绘制;而使用代理则允许在控制器中实现相关逻辑,无需遵循特定协议。
摘要由CSDN通过智能技术生成

想要自定义图层,只需要构建一个类继承CALayer方法

这里写图片描述

如果让自定义图层初始化上面就有画好的图形,有两种办法

重写drawInContext方法

自定义的图层下面的方法,然后必须自定义的图层对象显示调用
[layer setNeedsDisplay]然后才会调用这个方法;

自定图层文件

- (void)drawInContext:(CGContextRef)ctx {
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);//设置红色

    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 50));//画圆

    CGContextFillPath(ctx);
}

控制器文件

 TestLayer *layer = [TestLayer layer];
    layer.bounds = CGRectMake(0, 0, 100, 100);
    layer.position = CGPointMake(100, 100);
    layer.anchorPoint = CGPointMake(0, 0);
    layer.backgroundColor = [UIColor blueColor].CGColor;
    layer.cornerRadius = 10;
    [layer setNeedsDisplay];//必须要显示调用这个方法,才会调用上面的那个方法
    [self.view.layer addSublayer:layer];

使用代理

首先代理控制器不需要遵循协议,因为这个协议是一个分类,所有的NSObject都实现了

控制器实现代理的方法

#pragma marks -实现代理的方法
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);

    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 50, 50));

    CGContextFillPath(ctx);
}

调用

TestLayer *layer = [TestLayer layer];
layer.bounds = CGRectMake(0, 0, 100, 100);
layer.position = CGPointMake(100, 100);
layer.anchorPoint = CGPointMake(0, 0);
layer.backgroundColor = [UIColor blueColor].CGColor;
layer.cornerRadius = 10;
layer.delegate = self;
[layer setNeedsDisplay];//必须显示调用,不然也不会调用代理的方法
[self.view.layer addSublayer:layer];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值