+ (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) ![]() 我们也可以在SubLayer中重写- (instancetype)init
代码如下: - (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]; 结果如图: ![]() |
|
来自: 九辰夕 > 《QuartzCore框架》