我正在尝试在Mac应用中的标签上获得内部阴影。
我正在尝试匹配我的设计师发送的Photoshop设计。
我想要匹配的外观是:
在Photoshop中完成此操作的方法是使用以下设置设置内部阴影:
我在其他网站上看到过这种类型的东西的几种不同的解决方案,但它们都没有正常工作。
例如每个人都说要使用:
[[myNSTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
我发现很多关于在NSBezierPath或类似内容上做内部阴影但没有标签的东西。
这个问题的答案说使用上面的setBackgroundStyle然后说
然后可以通过使用带有NSGradient的自定义视图
来达到渐变背景
但这种观点在哪里? 答案引用的链接再次谈到在窗口上做一个内部阴影,而不是文本。
任何人都可以帮我解决这个问题吗?
由于
答案 0 :(得分:4)
这种效果在Photoshop中很容易制作。不幸的是,在Cocoa应用程序中,它并不是那么简单。 我不知道用标准控件做一个简单的方法,但我会告诉你如何处理这个问题。
问题是必须通过和对象删除阴影。换句话说,阴影总是模态的,不能只是在没有实际物体的情况下绘制阴影。在核心图形中,阴影是绘图上下文的属性。渲染对象时,我们可以将阴影效果添加到进程中。
现在,当我们知道真正的问题时,解决方案是小菜一碟:)
我们这里说的是从您的文字生成的图像。您可以在Internet上找到如何将文本呈现到位图上下文的示例。
你只需要:
反转它。
将阴影渲染到图像(位图上下文)。
通过排除倒置的图像来掩盖图像。
在您拥有的背景纹理上渲染结果图像。
我会创建一个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];
其中给出以下内容: