我希望实现文字外观,如下图所示:
现在我正在研究字母周围的阴影,我无法弄清楚如何做到这一点。
到目前为止我尝试了什么:
- 解决方案:
label.shadowColor = [UIColor blackColor];
label.shadowOffset = CGSizeMake(1, 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 设置为黑色,它也会产生过于柔和的阴影:
显然这还不够,我已经考虑过在标签的背景下绘画了。但是,即使通过上下文绘制,我也不清楚如何实现目标。
任何想法都会非常感激。
答案 0 :(得分: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);
它的输出是这样的: -
答案 1 :(得分:1)
使用您想要的形状的显式阴影路径。听起来你想要一个与你的文字形状相同的阴影,但是更大,每个阴影字母都以相应的字母为中心。完成后,使用阴影半径将阴影边缘软化到您想要的任何程度。
您所拥有的代码仅依靠阴影半径来使阴影大于文本,从而无法控制柔和度。
答案 2 :(得分: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];