iPhone UILabel文字软阴影

Dim*_*ris 59 iphone objective-c shadow uilabel iphone-sdk-3.0

我知道iPhone上开箱即用的UILabel不支持柔和阴影.那么实现我自己的最佳方式是什么?

编辑:

显然我会UILabel继承并绘制-drawRect:我的问题是,我如何将标签的内容作为图形并在它们周围绘制,模糊它们等等......

编辑2:

一年后我回到了这个问题.与此同时,我构建了一个类,允许您轻松地向标签添加柔和阴影并调整其半径等,并在文本本身上绘制渐变.你可以在GitHub上找到它:https://github.com/doukasd/iOS-Components/tree/master/Views

IlD*_*Dan 189

从3.2开始,SDK中直接支持阴影.

label.layer.shadowColor = [label.textColor CGColor];
label.layer.shadowOffset = CGSizeMake(0.0, 0.0);
Run Code Online (Sandbox Code Playgroud)

导入<QuartzCore/QuartzCore.h>和播放一些参数:

label.layer.shadowRadius = 3.0;
label.layer.shadowOpacity = 0.5;
Run Code Online (Sandbox Code Playgroud)

并且,如果您发现您的阴影被标签边界剪切:

label.layer.masksToBounds = NO;
Run Code Online (Sandbox Code Playgroud)

终于定了

label.layer.shouldRasterize = YES
Run Code Online (Sandbox Code Playgroud)

  • 请注意,要使用shadowRadius,您必须包含QuartzCore标题:`#import <QuartzCore/QuartzCore.h>` (12认同)
  • 由于某些原因,这对我的UILabel没有影响 (5认同)
  • + 1为maskToBounds额外信息. (4认同)
  • maskToBounds默认为NO,请编辑你的例子,因为shadowRadius = 20非常高,所以可能看不到工作(就像我的情况,也可能是@Pascalius).对于小标签,甚至3(默认值)有点太多了. (2认同)

小智 38

我建议你使用UILabel的shadowColor和shadowOffset属性:

UILabel* label = [[UILabel alloc] init];
label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(0,1);
Run Code Online (Sandbox Code Playgroud)

  • 他的意思是模糊的阴影,没有尖锐的边缘. (4认同)

Bra*_*son 19

这个答案这个类似的问题提供了代码绘制后面一个UILabel一个模糊的影子.作者使用CGContextSetShadow()为绘制的文本生成阴影.


Ste*_*fan 17

除了IIDan的回答:出于某些目的,有必要设置

label.layer.shouldRasterize = YES
Run Code Online (Sandbox Code Playgroud)

我认为这是由于用于渲染阴影的混合模式.例如,我有一个深色背景和白色文本,并希望使用黑色阴影发光"突出显示"文本.直到我设置这个属性才行.


Yan*_*yer 7

在视图的图层上应用(柔和)阴影,如下所示:

UILabel *label = [[UIabel alloc] init];
label.layer.shadowColor = [[UIColor whiteColor] CGColor];
label.layer.shadowOpacity = 1.0;
Run Code Online (Sandbox Code Playgroud)


Seb*_*jas 6

为了使事情保持最新:在Swift中创建阴影就像这样简单:

导入QuartzCore Framework

import QuartzCore
Run Code Online (Sandbox Code Playgroud)

并将阴影属性设置为您的标签

titleLabel.shadowColor = UIColor.blackColor()
titleLabel.shadowOffset = CGSizeMake(0.0, 0.0)
titleLabel.layer.shadowRadius = 5.0
titleLabel.layer.shadowOpacity = 0.8
titleLabel.layer.masksToBounds = false
titleLabel.layer.shouldRasterize = true
Run Code Online (Sandbox Code Playgroud)


小智 5

_nameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_nameLabel.font = [UIFont boldSystemFontOfSize:19.0f];
_nameLabel.textColor = [UIColor whiteColor];
_nameLabel.backgroundColor = [UIColor clearColor];
_nameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.2];
_nameLabel.shadowOffset = CGSizeMake(0, 1);
Run Code Online (Sandbox Code Playgroud)

我认为你应该使用[UIColor colorWithWhite:0 alpha:0.2]来设置alpha值.