IOS将CAlayer应用于所有UILabel层

时间:2013-09-28 13:16:53

标签: iphone ios objective-c ipad

我需要在我的视图中将我所做的CAlayer应用到我的所有UIlabel

我的视图中有6个UIlabel,我按照以下代码编写了一个CAlayer,并希望将此图层应用于我的所有UIlabels

CALayer *lay=[CALayer layer];
lay.borderWidth=2;
lay.borderColor=[UIColor darkGrayColor].CGColor;

[out_lat_min.layer addSublayer:lay]; 

我的一个名为out_lat_min的UIlabel

但不行,你能支持我吗?

3 个答案:

答案 0 :(得分:1)

如果这是您经常使用的标签“风格”,那么最佳模式是UILabel上的类别。这不是行为改变,因此子类化不是正确的答案。

<强>的UILabel + MyCompany.m

+ (UILabel *)borderedLabel {
   UILabel *label = [[UILabel alloc] init];
   [label.layer setBorderWidth:2.0f];
   [label.layer setBorderColor:[UIColor darkGrayColor].CGColor];
   return label;
}

然后,在您的代码中,使用此方法在需要具有此行为的标签的位置创建标签,例如:

UILabel *label1 = [UILabel borderedLabel];

如果还有其他需求,例如改变标签的颜色或宽度,请修改类别方法以获取参数。

答案 1 :(得分:0)

您无法将CALayer“应用”到UIView。每个UIView都有自己的图层。如果要将该颜色应用于多个UIViews的图层,则必须执行此操作。像这样:

for (UIView* x in anArrayOfUIViews)
{
    x.layer.borderWidth = 2;
    x.layer.borderColor = [UIColor darkGrayColor].CGColor;
}

此外,CALayer不能是多个其他图层的子图层。这就是它的工作方式。

答案 2 :(得分:0)

以这种方式为所有UILabel执行for循环:

for (UILabel *label in [self.view subviews]) {
        [label.layer setBorderWidth:2.0f];
        [label.layer setBorderColor:[UIColor darkGrayColor].CGColor];
    }

for循环允许您在self.view中控制每个单独的UILabel,然后您可以更改其图层。

请记住导入Quartzcore

#import <QuartzCore/QuartzCore.h>

编辑:如果您想按方法更改图层,可以执行

- (void)applyLayerToLabel:(UILabel *)aLabel
{
    [aLabel.layer setBorderWidth:2.0f];
    [aLabel.layer setBorderColor:[UIColor darkGrayColor].CGColor];
}

然后在需要时以这种方式调用它:

[self applyLayerToLabel:theNameOfTheLabelYouWantToChange];