titulo texto puede poner para mover mostrar mac lugar letra herramientas como color cambiar barra macos cocoa nswindow titlebar

macos - puede - como poner texto en imovie para mac



Cómo cambiar el color de la barra de título de NSWindow en OSX (3)

Después de una larga búsqueda sobre el color de la barra de título de NSWindow y el color del título, he encontrado una solución de dibujo fácil. Estoy publicando esto para compartir mis conocimientos.


Hay una manera mucho más fácil de hacer esto. He leído que puede cambiar la apariencia de una ventana a "texturada" en un archivo Storyboard / .xib, pero eso no funciona completamente (el color de la barra de título está moteado). Sin embargo, puede cambiar el color de su código con solo dos líneas:

window.titlebarAppearsTransparent = true // gives it "flat" look window.backgroundColor = <NSColor> // set the background color


No hay mensaje de advertencia en OSX 10.10. como eso

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]; }


Subclasea un NSView con el nombre MyTitleView y agrega el siguiente código

- (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]; }

En appDelegate, MyTitleView la clase MyTitleView y agregue el siguiente código

- (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]]; }