如何在NSTextField中删除内部阴影?

时间:2012-04-06 19:50:10

标签: cocoa

我需要删除NSTextField中文本的内部阴影,有没有解决方案?

3 个答案:

答案 0 :(得分:4)

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

    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属性。

在绘制操作期间执行[阴影设置]会使之后绘制的内容在

下复制

答案 1 :(得分:0)

这里是Swift 4.2中用于投影的代码。由于阴影经常(并非总是但经常!)掉落到文本的右边,因此我在Swift代码中略微调整了示例偏移值,仅提供了另一个示例。

考虑对象的阴影,将其作为图形的原点(零点)。如您所料,正的X值将阴影投射到右侧;负值在左侧。我不确定为什么在这种情况下(perhaps something to do with the iOS vs. macOS quirk relating to the Y axis?),但是Y轴被翻转了-正的Y值会在对象下方投射阴影;负值在其上方投射阴影。

因此,如果您恰好在寻找投射阴影的对象的下方右侧以下的投影,则需要正值NSMakeSize的x和y值

对于Swift 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

答案 2 :(得分: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()

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

相关问题