我需要在我的视图中将我所做的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
但不行,你能支持我吗?
答案 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];