3

我需要使用自定义NSView子类来绘制一些内容,但是当用户悬停时它不会像突出显示的那样绘制,并且NSMenu当用户单击它时它不会关闭。有任何想法吗?

编辑

所以使用-drawRect:并且[[self enclosingMenuItem] isHighlighted]我能够判断我是否需要将视图绘制为突出显示并且有机会这样做。我所要弄清楚的是如何做到这一点。

4

3 回答 3

5

也许你应该这样尝试:

#define menuItem ([self enclosingMenuItem])

- (void) drawRect: (NSRect) rect {
    BOOL isHighlighted = [menuItem isHighlighted];
    if (isHighlighted) {
        [[NSColor selectedMenuItemColor] set];
        [NSBezierPath fillRect:rect];
    } else {
        [super drawRect: rect];
    }
}
于 2010-05-29T22:48:55.590 回答
1

我不确定我是否理解你的问题。我认为你的意思是:菜单打开,你的所有图纸都停止了。我认为这是因为打开的 NSMenu 停止了 UI 的 NSRunLoop 线程。两者之一。您应该尝试在其他线程中进行绘图线程安全。

于 2010-05-27T04:59:57.400 回答
0

这对我有用。我使用堆栈视图。但这也适用于视图。

class MenuStackView: NSStackView {

override init(frame frameRect: NSRect) {
    super.init(frame: frameRect)
}

required init?(coder aDecoder: NSCoder) {
   super.init(coder: aDecoder)
}

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
    let menuItem = self.enclosingMenuItem
    let isHighlighted = menuItem?.isHighlighted ?? false
    if isHighlighted {
        NSColor.selectedMenuItemColor.set()
        NSBezierPath.fill(dirtyRect)
    } 
}
}
于 2021-03-24T10:23:05.853 回答