gpt4 book ai didi

cocoa - 绘制到透明目标会导致绘制伪影

转载 作者:行者123 更新时间:2023-12-03 16:36:42 25 4
gpt4 key购买 nike

我有NSWindow:

_window = [[NSWindow alloc] init];
[_window setOpaque:NO];
[_window setBackgroundColor:[NSColor clearColor]];
[_window setStyleMask:NSBorderlessWindowMask];

我的自定义 View (无图层)作为其内容 View :

[_window setContentView:[[MyCustomView alloc] init]];

在我的自定义 View 的 drawRect: 中,我创建了看起来像系统弹出窗口并填充颜色的贝塞尔曲线路径。

- (void)drawRect:(NSRect)dirtyRect
{
[NSGraphicsContext saveGraphicsState];
[super drawRect:self.bounds];
NSBezierPath *path = [self bodyShape];
[self.backgroundColor setFill];
[path fill];
[NSGraphicsContext restoreGraphicsState];
}

一切看起来都很棒 first time popover shows
直到我移动弹出框位置指示器。在窗口中重绘后会出现伪像,而我的自定义 View 的 drawRect: 则在右侧绘制内容 drawing with artifacts .
当我下次绘制内容时,这个白色三角形(见上图)停留在窗口中的同一位置并随窗口移动。 Artifact moves with window
如果我添加到我的 View 图层 - 一切似乎都正常,但我无法添加图层。
如果我用一些纯色填充 View ,就不会出现伪影。 Fill with solid color
我建议 Cocoa 缓存第一个位图。但我不知道为什么会发生这种情况以及如何解决这个问题。也许有人知道为什么如何解决它?谢谢。

最佳答案

我找到了!问题在于窗口缓存了地点指示器周围的阴影。我通过调用 NSWindowinvalidateShadow 方法来修复它。

关于cocoa - 绘制到透明目标会导致绘制伪影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com