在透明元素下的NSView中绘制图像背景

时间:2014-01-12 22:22:20

标签: objective-c macos cocoa nsview drawrect

我想在NSView中绘制图像背景,并在其上放置一些也具有透明背景的元素。

我已经覆盖了NSView的draw rect:

- (void)drawRect:(NSRect)rect
{
[NSGraphicsContext saveGraphicsState];

NSImage *image = [NSImage imageNamed:@"header_background.gif"];

[image drawInRect:CGRectMake(0, rect.size.height - 75, rect.size.width, 75) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];

[NSGraphicsContext restoreGraphicsState];
}

NSWindow init:

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
{
self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag];
if (self) {
    [self setOpaque:NO];
    [self setHasShadow:YES];
    [self setBackgroundColor:[NSColor clearColor]];
}

return self;
}

之后有一种奇怪的效果。滑块和按钮的背景有时也会闪烁 enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:1)

嗯,首先,在绘制图像时会忽略您的“颜色”,因此没有做任何事情。其次,我在这里看到的代码可能不会导致问题,你可以发布文件的其余部分吗?

现在我怀疑你可能已经将这个视图标记为不透明,当它不是,或者你的视图层次结构中有其他奇怪的东西。