我需要在 NSTextField 中为文本添加内阴影,有什么解决方案吗?
问问题
1537 次
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 回答