NSTextField内部阴影

时间:2012-11-07 20:23:31

标签: cocoa core-graphics nstextfield nstextfieldcell

我正在尝试在Mac应用中的标签上获得内部阴影。

我正在尝试匹配我的设计师发送的Photoshop设计。 我想要匹配的外观是: Photoshop Design

在Photoshop中完成此操作的方法是使用以下设置设置内部阴影: Photoshop Settings

我在其他网站上看到过这种类型的东西的几种不同的解决方案,但它们都没有正常工作。

例如每个人都说要使用:

[[myNSTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

我发现很多关于在NSBezierPath或类似内容上做内部阴影但没有标签的东西。

这个问题的答案说使用上面的setBackgroundStyle然后说

  

然后可以通过使用带有NSGradient的自定义视图

来达到渐变背景

但这种观点在哪里? 答案引用的链接再次谈到在窗口上做一个内部阴影,而不是文本。

任何人都可以帮我解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:4)

这种效果在Photoshop中很容易制作。不幸的是,在Cocoa应用程序中,它并不是那么简单。 我不知道用标准控件做一个简单的方法,但我会告诉你如何处理这个问题。

问题是必须通过和对象删除阴影。换句话说,阴影总是模态的,不能只是在没有实际物体的情况下绘制阴影。在核心图形中,阴影是绘图上下文的属性。渲染对象时,我们可以将阴影效果添加到进程中。

现在,当我们知道真正的问题时,解决方案是小菜一碟:)

我们这里说的是从您的文字生成的图像。您可以在Internet上找到如何将文本呈现到位图上下文的示例。

enter image description here

你只需要:

反转它。

enter image description here

将阴影渲染到图像(位图上下文)。

enter image description here

通过排除倒置的图像来掩盖图像。

enter image description here

在您拥有的背景纹理上渲染结果图像。

enter image description here

我会创建一个NSView子类并在该层上绘制所有这些东西。您可以找到如何使您拥有位图上下文并在其上绘制的示例。以下是使用蒙版https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html

的方法

我希望这会有所帮助。

答案 1 :(得分:0)

我无法找到对NSTextField的文本进行阴影处理的方法。有可能,但是对于NSTextView来说很容易,对于一个简单的标签,它应该是一个合理的选择。

这是一个标签的示例,该标签具有清晰的背景和白色文本,文本上带有黑色小阴影。

NSTextView *textView = [[NSTextView alloc] initWithFrame:NSMakeRect(10.0, 10.0f, 200.0f, 20.0f)];
[textView setSelectable:FALSE];
[textView setTextColor:[NSColor whiteColor]];
[textView setBackgroundColor:[NSColor clearColor]];
[textView setFont:[NSFont systemFontOfSize:14.0f]];
[textView setString:@"Boom goes the dynamite!"];

NSShadow *shadow = [[NSShadow alloc] init];
[shadow setShadowColor:[NSColor blackColor]];
[shadow setShadowOffset:NSMakeSize(1.0f, 1.0f)];
[shadow setShadowBlurRadius:1.0];
[textView setShadow:shadow];

[parentView addSubview:textView];

其中给出以下内容:

NSTextView text shadow example

相关问题