我有NSWindow
:
_window = [[NSWindow alloc] init];
[_window setOpaque:NO];
[_window setBackgroundColor:[NSColor clearColor]];
[_window setStyleMask:NSBorderlessWindowMask];
我的内容视图是我的自定义视图(没有图层):
[_window setContentView:[[MyCustomView alloc] init]];
在我的自定义视图的drawRect:
中,我创建了bezier路径,看起来像系统弹出并填充颜色。
- (void)drawRect:(NSRect)dirtyRect
{
[NSGraphicsContext saveGraphicsState];
[super drawRect:self.bounds];
NSBezierPath *path = [self bodyShape];
[self.backgroundColor setFill];
[path fill];
[NSGraphicsContext restoreGraphicsState];
}
所有看起来都很棒
直到我移动popover位置指示器。在窗口中重新绘制后会出现工件,而我的自定义视图的drawRect:
会在内绘制内容。
当我下次绘制内容时,这个白色三角形(见上图)在窗口中保持相同位置并随窗口移动。
如果我添加到我的视图层 - 一切似乎都没问题,但我无法添加图层
如果我用一些纯色填充我的视图,则没有伪影。
我建议Cocoa缓存第一个位图。但我不确定为什么会发生这种情况以及如何解决这个问题。也许有人知道为什么要修复它?
感谢。
答案 0 :(得分:2)
我找到了!问题是窗口缓存了地方指示器周围的阴影。我通过调用invalidateShadow
的{{1}}方法修复了此问题。