0

我想实现如下图所示的文本外观: 在此处输入图像描述 在此处输入图像描述

现在我正在处理字母周围的阴影,但我不知道该怎么做。

到目前为止我尝试过
的: - 解决方案:

label.shadowColor = [UIColor blackColor];
label.shadowOffset = CGSizeMake(1, 2);

给出了一个很好的锐利阴影,但它不符合我的需要有两个原因:

  1. 它只从一侧给出阴影,由shadowOffset设置,而我需要一个“包裹”阴影;
  2. 该解决方案不会像图片中那样给出阴影的柔和部分(渐变);

- 解决方案:

label.layer.shadowOffset = CGSizeMake(0, 0);
label.layer.shadowRadius = 5.0;
label.layer.shouldRasterize = YES;
label.layer.shadowOpacity = 1;
label.layer.shadowColor = [UIColor blackColor].CGColor;
label.layer.masksToBounds = NO;

效果很好,但是即使shadowOpacity设置为 1 并且shadowColor设置为黑色,它也会产生过于柔和的阴影:
在此处输入图像描述
显然这还不够,我已经考虑在标签的上下文中绘图。但我不清楚即使通过上下文绘制我将如何实现目标。

任何想法将不胜感激。

4

3 回答 3

1

试试下面的代码:-

  [_testLable setText:@"TION ERRO"];
    [_testLable setTextColor:[UIColor whiteColor]];

    [_testLable setFont:[UIFont boldSystemFontOfSize:22] ];
    _testLable.layer.shadowOffset = CGSizeMake(0, 0);
    _testLable.layer.shadowRadius = 10.0;
    _testLable.layer.shouldRasterize = YES;
    _testLable.layer.shadowOpacity = 1;
    _testLable.layer.shadowColor = [UIColor blackColor].CGColor;
    _testLable.layer.masksToBounds = NO;

    CGPathRef shadowPath = CGPathCreateWithRect(_testLable.bounds, NULL);
    _testLable.layer.shadowPath = shadowPath;
    CGPathRelease(shadowPath);

它的输出是这样的:-

在此处输入图像描述

于 2013-08-24T12:30:36.040 回答
1

使用您想要的形状的显式阴影路径。听起来您想要一个与文本形状相同但更大的阴影,每个阴影字母都以相应字母为中心。一旦你有了它,使用阴影半径将阴影的边缘软化到你想要的任何程度。

您拥有的代码仅依靠阴影半径来使阴影大于文本,从而消除了您控制柔和度的能力。

于 2013-08-24T13:54:25.230 回答
1

试试这个 创建一个自定义UILabel子类和Override下面的方法

- (void)drawTextInRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextSetShadow(context, CGSizeMake(0.0, 0.0), 10);
    CGContextSetShadowWithColor(context, CGSizeMake(0.0, 0.0), 10, [UIColor blackColor].CGColor);

    [super drawTextInRect:rect];

    CGContextRestoreGState(context);
}

bottomColorLayer给标签

CALayer *bottomColorLayer = [CALayer layer];
bottomColorLayer.frame = CGRectMake(0, labelRect.size.height/2, labelRect.size.width, labelRect.size.height/2);
bottomColorLayer.backgroundColor = [[UIColor colorWithWhite:0 alpha:.5] CGColor];
[label.layer insertSublayer:bottomColorLayer above:(CALayer *)label.layer];

在此处输入图像描述

或者如果你想要渐变

CAGradientLayer *bottomGradient = [CAGradientLayer layer];
bottomGradient.frame = CGRectMake(0, labelRect.size.height/2, labelRect.size.width, labelRect.size.height/2);
bottomGradient.cornerRadius = 0.0f;
bottomGradient.colors = @[(id)[[UIColor colorWithWhite:1 alpha:.5] CGColor], (id)[[UIColor colorWithWhite:0 alpha:.5] CGColor]];
[label.layer insertSublayer:bottomGradient above:(CALayer *)label.layer];
于 2013-08-24T14:05:45.347 回答