После долгих поисков относительно цвета и цвета заголовкая нашел решение для простого рисования. Я отправляю это, чтобы поделиться своими знаниями.Как изменить цвет строки заголовка NSWindow в OSX
16
A
ответ
24
Sub класс а NSView
с именем MyTitleView
и добавьте следующий код
- (void)drawString:(NSString *)string inRect:(NSRect)rect {
static NSDictionary *att = nil;
if (!att) {
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:NSLineBreakByTruncatingTail];
[style setAlignment:NSCenterTextAlignment];
att = [[NSDictionary alloc] initWithObjectsAndKeys: style, NSParagraphStyleAttributeName,[NSColor whiteColor], NSForegroundColorAttributeName,[NSFont fontWithName:@"Helvetica" size:12], NSFontAttributeName, nil];
[style release];
}
NSRect titlebarRect = NSMakeRect(rect.origin.x+20, rect.origin.y-4, rect.size.width, rect.size.height);
[string drawInRect:titlebarRect withAttributes:att];
}
- (void)drawRect:(NSRect)dirtyRect
{
NSRect windowFrame = [NSWindow frameRectForContentRect:[[[self window] contentView] bounds] styleMask:[[self window] styleMask]];
NSRect contentBounds = [[[self window] contentView] bounds];
NSRect titlebarRect = NSMakeRect(0, 0, self.bounds.size.width, windowFrame.size.height - contentBounds.size.height);
titlebarRect.origin.y = self.bounds.size.height - titlebarRect.size.height;
NSRect topHalf, bottomHalf;
NSDivideRect(titlebarRect, &topHalf, &bottomHalf, floor(titlebarRect.size.height/2.0), NSMaxYEdge);
NSBezierPath * path = [NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:4.0 yRadius:4.0];
[[NSBezierPath bezierPathWithRect:titlebarRect] addClip];
NSGradient * gradient1 = [[[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.0 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:1 alpha:1.0]] autorelease];
NSGradient * gradient2 = [[[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:1 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0 alpha:1.0]] autorelease];
[path addClip];
// [[NSColor colorWithCalibratedWhite:0.00 alpha:1.0] set];
// [path fill];
[gradient1 drawInRect:topHalf angle:270.0];
[gradient2 drawInRect:bottomHalf angle:270.0];
[[NSColor blackColor] set];
NSRectFill(NSMakeRect(0, -4, self.bounds.size.width, 1.0));
[self drawString:@"My Title" inRect:titlebarRect];
}
В AppDelegate импортируем класс MyTitleView
и добавьте следующий код
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSRect boundsRect = [[[_window contentView] superview] bounds];
BlackTitlebarView * titleview = [[BlackTitlebarView alloc] initWithFrame:boundsRect];
[titleview setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[[[_window contentView] superview] addSubview:titleview positioned:NSWindowBelow relativeTo:[[[[_window contentView] superview] subviews] objectAtIndex:0]];
}
20
Существует гораздо более простой способ сделать это , Я читал, что вы можете изменить внешний вид окна на «текстурированный» в файле Storyboard/.xib, но это не работает полностью (цвет панели заголовка пятнистый). Тем не менее, вы можете изменить цвет в коде только двумя строками:
window.titlebarAppearsTransparent = true // gives it "flat" look
window.backgroundColor = <NSColor> // set the background color
0
Нет предупреждающего сообщения на OSX 10.10. подобный
NSView * windowTopView = [[_window standardWindowButton: NSWindowCloseButton] superview];
-(void) applicationDidFinishLaunching:(NSNotification *)aNotification {
NSRect boundsRect = [windowTopView bounds];
NSView *windowTopView = [[_window standardWindowButton:NSWindowCloseButton] superview];
BTitleView * titleview = [[BTitleView alloc] initWithFrame:boundsRect];
[titleview setTitleImagePath:[[NSBundle mainBundle] pathForResource:@"Top1-01" ofType:@"bmp"]] ;
[titleview setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[windowTopView addSubview:titleview positioned:NSWindowBelow relativeTo:[[windowTopView subviews] objectAtIndex:0]];
//addTitlebarAccessoryViewController
NSTitlebarAccessoryViewController *dummyTitlebarAccessoryViewController;
NSView * logoview = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 11)];
dummyTitlebarAccessoryViewController = [NSTitlebarAccessoryViewController new];
dummyTitlebarAccessoryViewController.view = logoview;
dummyTitlebarAccessoryViewController.fullScreenMinHeight = 0;
[_window addTitlebarAccessoryViewController:dummyTitlebarAccessoryViewController];
}
Смежные вопросы
- 1. Изменить цвет строки заголовка - Mac
- 2. Как изменить цвет заголовка NSWindow в приложении Swift OS X?
- 3. Как изменить высоту заголовка NSWindow?
- 4. Изменение цвета заголовка NSWindow
- 5. Как изменить цвет строки заголовка в IntelliJ?
- 6. Как изменить цвет строки заголовка приложения какао?
- 7. Как изменить цвет заголовка?
- 8. NSWindow заголовка с MTKView
- 9. настраиваемая строка заголовка для NSWindow
- 10. Как изменить цвет заголовка в строке заголовка
- 11. OSX - как изменить NSButton цвета заголовка
- 12. Изменить цвет заголовка в какао
- 13. Изменить цвет и кнопки строки заголовка
- 14. Изменить цвет строки заголовка (заголовок) приложения win32
- 15. NSWindow изменить размер уведомления
- 16. Как изменить цвет заголовка заголовка Eclipse RCP
- 17. Как изменить цвет заголовка UITableViewRowAction?
- 18. Изменить цвет заголовка списка?
- 19. Как изменить цвет заголовка DisclosurePanel
- 20. Как изменить цвет заголовка MFMailComposeViewController?
- 21. Как изменить цвет заголовка objectchoicefield
- 22. Удалите базовую границу строки заголовка NSWindow
- 23. Как изменить цвет строки заголовка в активности андроида?
- 24. Как изменить цвет заголовка в материализованном?
- 25. Как изменить цвет заголовка GroupItems в PropertyGrid?
- 26. Как изменить цвет фона заголовка в wordpress?
- 27. Как изменить цвет заголовка администратора в Magento?
- 28. Как изменить цвет заголовка в TTLauncherItem?
- 29. Как изменить цвет заголовка в xyplot?
- 30. Как изменить цвет границ QMainWindow и заголовка?
Это абсолютно работает, но Apple, делает отметить, что по состоянию на Yosemite: «Что нового с семенем WWDC:. NSWindow никогда не поддерживал клиентов добавляющие подвидов ни к чему, кроме contentView Некоторые приложения будут добавлять подвидов в contentView.superview (также известный как пограничный вид окна). NSWindow теперь регистрируется, когда обнаруживает этот сценарий: «Предупреждение NSWindow: добавление неизвестного subview:». Приложениям, которые это делают, нужно будет исправить эту проблему, поскольку это предотвращает новые функции на 10.10 от правильной работы. См. titlebarAccessoryViewControllers для официального API. " –
где я могу вставить этот код? –