+ (nullable id)defaultValueForKey:(NSString *)key的使用
返回这个属性名所对应的属性值的默认值,如果默认值是未知的,则返回nil,子类可以重载这个方法,来设定一些默认值。
例如:我们新建一个SubLayer类继承自CALayer,则在SubLayer.m中重写此方法。如下:
+(id)defaultValueForKey:(NSString *)key{
if ([key isEqualToString:@"backgroundColor"]) {
return (id)[UIColor blackColor].CGColor;
}
if ([key isEqualToString:@"cornerRadius"]) {
return @20.0;
}
return [super defaultValueForKey:key];
}
然后,我们在mainViewController里面的view上添加一个SubLayer类型的layer。代码如下:
SubLayer*subLayer=[SubLayer layer];
subLayer.frame=CGRectMake(0,0,40,40);
subLayer.position=CGPointMake(100, NavHeight+30);
[self.view.layer addSublayer:subLayer];
结果:我们会发现sublayer是黑色的并且是圆角的,如图
另外,我们可以新建一个类SubView继承自UIView,然后在SubView.m中重写+(Class)layerClass方法,代码如下:
+(Class)layerClass
{
return [SubLayer class];
}
这样,我们就把SubView的layer设置成了SubLayer类型的。
然后,我们在mainViewController里面的view上添加一个SubView类型的view和UIView类型的view1。代码如下:
UIView*view1=[[UIView alloc]initWithFrame:CGRectMake(160, NavHeight+30, 40, 40)];
view1.backgroundColor=[UIColor magentaColor];
[self.view addSubview:view1];
SubView*view=[[SubView alloc]initWithFrame:CGRectMake(220,NavHeight+30, 40, 40)];
[self.view addSubview:view];
结果如下图:(左边是view1,右边是view)
代码如下:
- (instancetype)init
{
self = [super init];
if (self) {
self.transform=CATransform3DMakeRotation(M_PI_2, 1, 1, 1);
}
return self;
}
这样我们做出来的SubLayer就会旋转90度。
代码如下:
self.subLayer=[SubLayer layer];
self.subLayer.frame=CGRectMake(0,0,40,40);
self.subLayer.position=CGPointMake(100, NavHeight+30);
[self.view.layer addSublayer:self.subLayer];
结果如图:
联系客服