0

我需要将我所做的 CAlayer 应用于我视图上的所有 UIlabels

我的视图上有 6 个 UIlabels,我按照下面的代码做了一个 CAlayer,并希望将此层应用于我的所有 UIlabels

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

[out_lat_min.layer addSublayer:lay]; 

我的 UIlabel 之一叫 out_lat_min

但不工作,你能支持我吗?

4

3 回答 3

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

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

于 2013-09-30T00:05:37.853 回答
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];
于 2013-09-28T13:25:13.517 回答
0

您不能将 CALayer“应用”到 UIView。每个 UIView 都有自己的层。如果你想将该颜色应用到多个 UIViews 的图层,你只需要这样做。像这样:

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

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

于 2013-09-28T13:22:56.590 回答