gpt4 book ai didi

objective-c - NSView drawRect 干扰 subview ?

转载 作者:太空狗 更新时间:2023-10-30 03:53:41 25 4
gpt4 key购买 nike

我有一个 nsview,我使用 draw rect 绘制背景图像。它还有 3 个 subview nsbuttons。问题是,只要鼠标在一个按钮上按下,其他按钮就会消失。但是当我删除 draw rect 方法时,这不会发生。所以我猜这与绘制图像的 draw rect 方法有关。

我怎样才能避免这种情况?谢谢。

编辑:好的,我知道问题出在哪里了。基本上,我有一个 NSMenuItem,我在其中放置了一个带有 3 个按钮的 View 。但是在 NSMenu 中,在顶部,有一个 4 像素的填充。所以,基本上,为了删除填充,我使用了此处提供的解决方案: Gap above NSMenuItem custom view

在解决方案中,drawRect 方法中有一行:

[[NSBezierPath bezierPathWithRect:fullBounds] setClip];

此刻,我删除了这一行,按钮表现正常。但是,顶部的填充不会消失。

这是我的 drawRect:

- (void) drawRect:(NSRect)dirtyRect {

[[NSGraphicsContext currentContext] saveGraphicsState];

NSRect fullBounds = [self bounds];
fullBounds.size.height += 4;
[[NSBezierPath bezierPathWithRect:fullBounds] setClip];

NSImage *background = [NSImage imageNamed:@"bg.png"];
[background drawInRect:fullBounds fromRect:NSZeroRect operation:NSCompositeCopy fraction:100.0];

[[NSGraphicsContext currentContext] restoreGraphicsState];
}

最佳答案

链接问题的解决方案不包括保存和恢复图形状态,当您修改不是您创建的图形时,这是一个好主意。试一试:

- (void)drawRect:(NSRect)dirtyRect {
// Save the current clip rect that has been set up for you
[NSGraphicsContext saveGraphicsState];
// Calculate your fullBounds rect
// ...
// Set the clip rect
// ...
// Do your drawing
// ...
// Restore the correct clip rect
[NSGraphicsContext restoreGraphicsState]

关于objective-c - NSView drawRect 干扰 subview ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745889/

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