Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone UILabel文本软阴影_Iphone_Objective C_Iphone Sdk 3.0_Uilabel_Shadow - Fatal编程技术网

iPhone UILabel文本软阴影

iPhone UILabel文本软阴影,iphone,objective-c,iphone-sdk-3.0,uilabel,shadow,Iphone,Objective C,Iphone Sdk 3.0,Uilabel,Shadow,我知道iPhone上的UILabel开箱即用不支持软阴影。那么,实施我自己的方案的最佳方式是什么呢 编辑: 显然,我将对UILabel进行子类化,并在-drawRect中绘制: 我的问题是,我如何获得标签的内容作为图形,并围绕它们绘制,模糊它们等 编辑2: 大约一年后,我又回到这个问题上来。与此同时,我已经建立了一个类,允许您轻松地添加软阴影的标签,调整它的半径等,也绘制文本本身的梯度。您可以在GitHub上找到它:子类UILabel,并重写-drawInRect:以提供在UILabel后面绘制

我知道iPhone上的UILabel开箱即用不支持软阴影。那么,实施我自己的方案的最佳方式是什么呢

编辑:

显然,我将对
UILabel
进行子类化,并在-drawRect中绘制: 我的问题是,我如何获得标签的内容作为图形,并围绕它们绘制,模糊它们等

编辑2:


大约一年后,我又回到这个问题上来。与此同时,我已经建立了一个类,允许您轻松地添加软阴影的标签,调整它的半径等,也绘制文本本身的梯度。您可以在GitHub上找到它:

子类UILabel,并重写-drawInRect:

以提供在UILabel后面绘制模糊阴影的代码。作者使用CGContextSetShadow()为绘制的文本生成阴影。

子类UILabel,如前所述,然后在drawRect:,do
[self drawTextInRect:rect]
将文本绘制到当前上下文中。一旦它在那里,您就可以通过添加过滤器之类的方式开始使用它。如果您想使用刚刚绘制到上下文中的内容制作阴影,您应该能够使用:

CGContextSetShadowWithColor()

在文档中查找该函数以了解如何使用它。

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

UILabel* label = [[UILabel alloc] init];
label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(0,1);
在视图的层上应用(软)阴影,如下所示:

UILabel *label = [[UIabel alloc] init];
label.layer.shadowColor = [[UIColor whiteColor] CGColor];
label.layer.shadowOpacity = 1.0;

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

label.layer.shadowColor = [label.textColor CGColor];
label.layer.shadowOffset = CGSizeMake(0.0, 0.0);
#导入
并使用一些参数:

label.layer.shadowRadius = 3.0;
label.layer.shadowOpacity = 0.5;
并且,如果发现阴影被标签边界剪裁:

label.layer.masksToBounds = NO;
终于定了

label.layer.shouldRasterize = YES;

从iOS 5开始,Apple提供了一种专用api方法来创建带有软阴影的标签。 标签的速度非常快:我在一系列透明视图中同时使用了几十个标签,并且滚动动画的速度没有减慢

这仅适用于非应用商店应用程序(显然),并且您需要头文件

$SBBulletinBlurredShadowLabel = NSClassFromString("SBBulletinBlurredShadowLabel");

CGRect frame = CGRectZero;

SBBulletinBlurredShadowLabel *label = [[[$SBBulletinBlurredShadowLabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.text = @"I am a label with a soft shadow!";
[label sizeToFit];

我编写了一个库,它提供了一个UILabel子类,支持软阴影和一系列其他效果:


除了伊丹的回答之外: 出于某些目的,有必要设置

label.layer.shouldRasterize = YES
我认为这是由于用于渲染阴影的混合模式。例如,我有一个黑暗的背景和白色的文字,并希望“突出”的文字使用黑色阴影辉光。直到我设置了这个属性,它才开始工作

_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);

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

我尝试了几乎所有这些技术(FXLabel除外),但都无法在iOS 7上使用。我最终找到了对我来说非常合适的标签。我在Interface Builder中使用了THLabel,并设置了用户定义的运行时属性,以便非程序员可以轻松地控制外观

这就像一个把戏

UILabel *customLabel = [[UILabel alloc] init];

UIColor *color = [UIColor blueColor];
customLabel.layer.shadowColor = [color CGColor];
customLabel.layer.shadowRadius = 5.0f;
customLabel.layer.shadowOpacity = 1;
customLabel.layer.shadowOffset = CGSizeZero;
customLabel.layer.masksToBounds = NO;

要使事情保持最新:在Swift中创建阴影非常简单:

导入QuartzCore框架

import QuartzCore
并将阴影属性设置为标签

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

Swift 3
中,您可以创建扩展名:

import UIKit

extension UILabel {
    func shadow() {
        self.layer.shadowColor = self.textColor.cgColor
        self.layer.shadowOffset = CGSize.zero
        self.layer.shadowRadius = 3.0
        self.layer.shadowOpacity = 0.5
        self.layer.masksToBounds = false
        self.layer.shouldRasterize = true
    }
}
并通过以下方式使用:

label.shadow()

虽然不可能直接在
UILabel
上设置模糊半径,但您肯定可以通过操纵CALayer来更改它

刚刚设定:

//必需的属性
customLabel.layer.shadowRadius=5.0//将阴影半径设置为所需的值。
customLabel.layer.shadowOpacity=1.0//选择不透明度。确保其可见(默认值为0.0)
//其他选择
customLabel.layer.shadowOffset=CGSize(宽度:10,高度:10)
customLabel.layer.shadowColor=UIColor.black.cgColor
customLabel.layer.masksToBounds=false
我希望能帮助一些人,但其他回答未能澄清的是,如果您在尝试设置
.layer.shadowRadius
时还直接在Interface Builder上设置UILabel
阴影颜色
属性,则它将不起作用

因此,如果设置
label.layer.shadowRadius
无效,请在Interface Builder上验证此
UILabel
Shadow Color
。它应该设置为
默认值
。然后,如果您想要黑色以外的阴影颜色,请通过
.layer
属性设置此颜色


好的,这是显而易见的部分。那又怎样?那太好了,它就像广告上说的那样有效!谢谢但是你有没有办法让阴影变得更强烈?因为它是上下文的一部分,所以我不能多次绘制它,这会起到作用。您可以将颜色更改为100%不透明度的黑色(在他的示例中,它仅为80%),以及在CGContextSetShadow()调用中更改阴影半径。你也可以尝试从他设置的4,-4位置移动偏移量。是的,我尝试了100%不透明度等。关于大小,你设置的越大,阴影越不可见。。。我正在寻找类似Flash中阴影效果的东西,你可以将其设置为100%以上。如何实现这一点是基本SDK4.0?@Apple-那里的代码有什么问题?链接答案中的所有内容在当前的iOS版本上仍然有效。谢谢,但是可以。我其实是在寻找柔和的阴影。对于“柔和”的阴影-也许你可以适当地改变颜色?例如,我需要“柔和”的暗影由于黑色太过锐利,我最终选择了灰色:)快乐编码!:)他指的是模糊的阴影,没有锐利的边缘。请注意,要使用阴影半径,您必须包括QuartzCore标题:
#import
,出于某种原因,这对我的UILabel+1对于maskToBounds额外信息没有影响。maskToBounds默认为否,请编辑您的示例,因为阴影半径=20非常高,所以可能被认为不起作用(比如我的案例,也可能是@Pascalius)。即使是3(默认值)对于小标签来说也有点太多了。另外-我发现你需要将标签的背景色设置为clearColor,否则你将看不到阴影。如果你的应用程序要进入应用商店,你不想使用它。好吧,到b