我有一个带有文本字段和边框按钮的窗口。它是无边界和透明的,但问题会在任何窗口上重现。
该窗口的内容视图在 IB 中设置为绘制窗口背景的自定义类。
这是代码:
- (void)drawRect:(NSRect)dirtyRect
{
[NSGraphicsContext saveGraphicsState];
float cornerRadius = 10;
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:cornerRadius yRadius:cornerRadius];
[path setClip];
NSGradient *gradient = [[NSGradient alloc] initWithColorsAndLocations:
[NSColor colorWithCalibratedRed:0.96f green:0.96f blue:0.96f alpha:1.00f], 0.0f,
[NSColor colorWithCalibratedRed:0.84f green:0.84f blue:0.84f alpha:1.00f], 1.0f,
nil];
[gradient drawInRect:self.bounds angle:270];
[NSGraphicsContext restoreGraphicsState];
}
它会导致一些非常奇怪的伪影,例如消失的对象或文本字段的背景更改为窗口的:
这是怎么回事?我试图隔离它,我一直在玩这个“图形上下文状态保存”的东西(我不确定我是否理解正确),但问题仍然存在。
我有 XCode 4.4,SDK 是 10.7(我的操作系统也是),部署目标是 10.6。这可能没关系,但我过去一直在做类似的事情,我从来没有遇到过这样奇怪的问题。