分享

【iOS学习】CALayer设定一些属性的默认值

 九辰夕 2016-03-18


+ (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];

             }

 这样,我们就把SubViewlayer设置成了SubLayer类型的。

然后,我们在mainViewController里面的view上添加一个SubView类型的viewUIView类型的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];

 结果如图: 

                                                 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多