UILabel 中的内部阴影

Posted

技术标签:

【中文标题】UILabel 中的内部阴影【英文标题】:Inner shadow in a UILabel 【发布时间】:2011-08-08 20:57:17 【问题描述】:

在不使用图像的情况下,在 UILabel 中绘制内部阴影的最简单方法是什么?

我知道您可以将 shadowColor 和 shadowOffset 用于投影,但我没有看到内阴影的任何此类属性。

【问题讨论】:

如果您提供您想要的示例图像可能会有所帮助。我不确定您是否希望使文本看起来凹陷或其他一些视觉效果。 当然,这是一个内部阴影的示例(来自 Google):sublimeorange.com/css/css3-inner-shadow 【参考方案1】:

查看 FXLabel。我最近一直在使用它,效果很好。

https://github.com/nicklockwood/FXLabel

【讨论】:

【参考方案2】:

我不相信有任何简单的方法可以实现这种外观。您将需要使用图像或自定义视图来绘制阴影。

我会使用您最喜欢的图像编辑器来制作与透明度(或颜色,如果需要)合成的内部阴影图像,并将其加载到可拉伸的 UIImage 中。例如这里是一个内部阴影图像(17px x 17px):

你可以这样加载它:

UIImage* innerShadow = [ [ UIImage imageNamed: "innershadow.png" ] 
        stretchableImageWithLeftCapWidth: 8 topCapHeight: 8 ];
UIImageView* innerShadowView = [ [ [ UIImageView alloc ] initWithImage: innerShadow ] 
        autorelease ];
myLabel.backgroundColor = [ UIColor clearColor ];

然后将innerShadowView放在标签后面。如果您想避免使用图像资源,也可以通过编程方式生成图像。

** 基于 cmets 的更新如下 **

啊,根据您最近的评论,您要的效果与之前评论中的图片完全不同。

在这种情况下,您必须创建一个 UILabel 子类并自己绘制以合成您正在寻找的效果。看看this answer如何合成内阴影效果。

【讨论】:

嗯,我想这可能适用于UIViews,但我需要一个适用于UIViews 和UILabels 的解决方案。 UILabel 是 UIView 的子类。您认为这对您不起作用有什么具体原因吗? 是的,但是将其应用于 UILabel 只会在标签的框架中放置一个内部阴影。我需要在实际文本中添加一个内部阴影。抱歉,如果第一个示例具有误导性,但应该是这样的:download.oracle.com/javafx/2.0/visual_effects/img/inner.jpg【参考方案3】:

内阴影的任何此类属性是什么意思。 shadowOffset 是设置 UILabel 的阴影(垂直或水平阴影)的选项。

我不知道,但这个answer 可能实施起来很长。

【讨论】:

投影≠内阴影。阅读问题。

以上是关于UILabel 中的内部阴影的主要内容,如果未能解决你的问题,请参考以下文章

Core Graphics 中的内部阴影

UILabel,带有圆角半径和阴影

UILabel 最小字体大小阴影问题

在带有阴影的 UILabel 上使用 SizeToFit()?

带有图层阴影的UILabel文本颜色透明度?

UILabel设置背景色/阴影/描边