【发布时间】:2015-04-25 17:26:24
【问题描述】:
更新:
我添加了一个用于测试的示例项目,请参阅帖子底部。
原始问题:
我有一个NSWindow,当其他一些参数发生变化时,我会改变它的背景。
窗口背景是我通过在窗口视图的子类中覆盖drawRect 来绘制的渐变。
class MainWindowView: NSView {
override func drawRect(dirtyRect: NSRect) {
var rect = dirtyRect
let gradient = NSGradient(startingColor: backgroundColor, endingColor: darkerBackgroundColor)
gradient.drawInRect(rect, relativeCenterPosition: NSPoint(x: 0, y: 0))
super.drawRect(rect)
}
}
我在这个窗口上有两个NSTextFields。
NSTextFields 在awakeFromNib 中设置为drawsBackground = false,在IB 中设置为borderless。
我这里没有使用NSAttributedStrings,只是改变了NSTextFields的stringValue,当然还有他们的textColor。
一切正常...除了有时,文本字段有一个意想不到的略暗的半透明背景。
(在某些屏幕上很难看到,但它就在那里。)
问题:为什么会出现这种较暗的背景?
当然还有:我能做些什么来解决它?
我很确定是渐变破坏了某些东西,但我找不到什么...
注意:该项目使用 Swift,但我可以阅读 Objective-C 的答案。
编辑:
所以确实它似乎来自后面的渐变,请参阅测试窗口中的另一个屏幕截图。这次渐变是在 NSTextView 下的 Custom View 中绘制的,同样会出现不希望出现的效果:部分文本字段背景可见但不应该。
更新:
我在一个测试项目中做了一个非常简单的例子,用渐变来更明显地显示这种现象。只有一个窗口、我的渐变类和一个文本字段。你可以在this ZIP file.得到它(仅限30ko)
【问题讨论】:
标签: cocoa swift gradient nswindow nstextfield