【问题标题】:NSTextField Inner ShadowNSTextField 内阴影
【发布时间】:2012-11-07 20:23:30
【问题描述】:

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

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

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

我在其他网站上看到过针对此类事情的几种不同解决方案,但没有一个能正常工作。

例如每个人都说要使用:

[[myNSTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

我发现了很多关于在 NSBezierPath 或类似但不使用标签上做内阴影的东西。

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

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

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

谁能帮我解决这个问题?

谢谢

【问题讨论】:

    标签: cocoa core-graphics nstextfield nstextfieldcell


    【解决方案1】:

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

    问题是阴影必须被对象丢弃。换句话说,阴影始终是模态的,不能只绘制没有实际对象的阴影。在核心图形中,阴影是绘图上下文的一个属性。当我们渲染一个对象时,我们可以在进程中添加阴影效果。

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

    假设这里是从您的文本生成的图像。您可以在互联网上找到如何将文本渲染到位图上下文的示例。

    您只需:

    反转它。

    将其与阴影一起渲染到图像(位图上下文)。

    通过排除倒置图像来屏蔽图像。

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

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

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我无法找到在 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];
      

      这给出了以下内容:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多