微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

osx – 匹配含有自定义视图的优胜美地NSMenuItem的充满活力的背景

我尝试在OS X 10.10优胜美地菜单栏中的NSMenuItem添加自定义视图。

自定义视图只是一个具有NSTextField“标签”的NSView背景。

问题在于,当添加菜单中时,NSView的背景优势优美的活力/透明度。 NSTextfield标签不是。

通过使用NSRectFillUsingOperation,我已经得到了在优胜美地的一些背景颜色看起来很好。但其他人仍然不符合。当它工作时,手动“突出显示”视图后,原始颜色会改变,不再匹配。如果需要,我可以挖一些示例代码

那么当它在优胜美地看起来有些好的时候,在10.9小牛看来可怕。

我还尝试将wantsLayer属性设置为YES,将视图转换为CALayer支持的视图。这会产生其他问题,例如文本不会在清晰的背景下正确反锯齿。

我的问题:

如何在NSMenuItem自定义视图之上显示标签标签的背景必须与视图的背景完全匹配。解决方案必须在优胜美地和小牛队工作。

示例代码如下:

self.statusItem = [[NsstatusBar systemStatusBar]
statusItemWithLength:NSVariableStatusItemLength];
[self.statusItem setTitle:@"TEST"];
[self.statusItem setHighlightmode:YES];
[self.statusItem setEnabled:YES];
[self.statusItem setTarget:self];

NSMenu *menu = [[NSMenu alloc] init];
[menu addItemWithTitle:@"disabled menu item" action:nil keyEquivalent:@""];
[menu addItemWithTitle:@"Enabled menu item" action:@selector(enabled) keyEquivalent:@""];

NSTextField *label = [[NSTextField alloc] initWithFrame:NSMakeRect(30,20,50,20)];
label.stringValue = @"label";
label.editable = NO;
label.bordered = NO;
label.backgroundColor = [NSColor blueColor];
//label.backgroundColor = [NSColor clearColor];


PKMenuItemView *view = [[PKMenuItemView alloc] initWithFrame:NSMakeRect(0,200,50)];
[view addSubview:label];

NSMenuItem *viewMenuItem = [[NSMenuItem alloc] init];
[viewMenuItem setView:view];
[menu addItem:viewMenuItem];

self.statusItem.menu = menu;

我将NSView子类化以覆盖drawRect:并绘制一个彩色背景:

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    [[NSColor blueColor] setFill];
    NSRectFill(dirtyRect);
    //NSRectFillUsingOperation(dirtyRect,NSCompositeSourceOver);
}

解决方法

这肯定是一个黑客,但它对我有用。 尝试将NSImageView添加到您的自定义视图中。图像视图必须占据整个视图。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐