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