2

我需要在 NSTextField 中为文本添加内阴影,有什么解决方案吗?

4

3 回答 3

5

NSTextField 是一个 NSView 的子类,它有一个 shadow 字段,如果你创建一个 shadow 对象并将它分配给这个字段,视图会在绘制时自动显示一个阴影

    NSShadow* shadow = [[NSShadow alloc] init];
    shadow.shadowBlurRadius = 2; //set how many pixels the shadow has
    shadow.shadowOffset = NSMakeSize(2, -2); //the distance from the text the shadow is dropped
    shadow.shadowColor = [NSColor blackColor];
    self.textfield.shadow = shadow;

这是有效的,因为在 drawRect 上绘制的所有视图都通过使用 [shadow set] 来使用此阴影属性。

在绘制操作期间执行 [shadow set] 会使之后绘制的任何内容都被复制到下面

于 2013-03-11T17:45:32.747 回答
0

这是 Swift 4.2 中阴影的代码。由于阴影经常(不总是,但经常!)落在文本的右侧,我在 Swift 代码中稍微调整了示例偏移值,只是为了提供另一个示例。

将阴影附加到的对象视为图形的原点(零点)。如您所料,正 X 值将阴影向右投射;负值在左边。我不确定为什么在这种情况下(可能与 iOS 与 macOS 与 Y 轴有关的怪癖有关?),但 Y 轴被翻转——正 Y 值在对象下方投射阴影;负值在它上面投下阴影。

因此,如果您碰巧正在寻找投射阴影的对象下方右侧的投影,您希望x 和 y 的值都为正值NSMakeSize

对于斯威夫特 4.2

var shadow: NSShadow = NSShadow()
shadow.shadowBlurRadius = 2  // Amount of blur (in pixels) applied to the shadow.
shadow.shadowOffset = NSMakeSize(4, 4) // the distance from the text the shadow is dropped (positive X = to the right; positive Y = below the text)
shadow.shadowColor = NSColor.black
self.textfield.shadow = shadow
于 2019-01-19T13:04:37.007 回答
0

通过将 MMAC 的答案放入扩展中来扩展它,以便您可以在需要时将其作为函数从任何文本字段中调用。

extension NSTextField {
    
    func applyShadow() {
        let shadow: NSShadow = NSShadow()
        shadow.shadowBlurRadius = 2
        shadow.shadowOffset = NSMakeSize(4, 4)
        shadow.shadowColor = NSColor.black
        self.shadow = shadow
    }
}

self.textField.applyShadow()

我将这些扩展的集合保存在一个文件中,可以携带到不同的项目中。

于 2020-08-27T05:46:54.400 回答