我需要删除NSTextField中文本的内部阴影,有没有解决方案?
答案 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()
我将这些扩展名的集合保存在一个文件中,可以携带到不同的项目中。