在长时间搜索NSWindow
标题栏颜色和标题颜色之后,我找到了一个简单的绘图解决方案。我发布这个分享我的知识。
NSView
用名称子类aMyTitleView
并添加以下代码
- (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]];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句