NSTextField内部阴影

问题描述 投票:3回答:2

我试图在我的Mac应用程序中的标签上获得内部阴影。

我试图匹配我的设计师发送的Photoshop设计。我想要匹配的外观是:

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

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

例如每个人都说要使用:

[[myNSTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

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

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

然后可以通过使用带有NSGradient的自定义视图来达到渐变背景

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

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

谢谢

cocoa core-graphics nstextfield nstextfieldcell
2个回答
4
投票

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

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

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

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

你只需要:

反转它。

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

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

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

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

我希望这有帮助。


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

© www.soinside.com 2019 - 2024. All rights reserved.