要在停靠栏中为您的应用添加徽章很简单,只需拨打[NSDockTile setBadgeLabel]
即可。但我想为通用NSView添加徽章。有没有办法做到这一点?或者如果不这样做,你如何绘制一个以使其与系统UI的其余部分保持一致?
答案 0 :(得分:4)
没有内置方法可以在NSView
上绘制徽章,因此您应该自己绘制徽章。
这是我绘制徽章的代码:
- (void)drawBadgeImageWithText:(NSString*)text atPoint:(NSPoint)point
{
NSSize badgeSize = [self badgeSizeForString:text];
NSRect badgeRect = NSMakeRect(point.x - badgeSize.width, point.y - badgeSize.height, badgeSize.width, badgeSize.height);
[NSGraphicsContext saveGraphicsState];
// Set a shadow
NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = [[NSColor blackColor] colorWithAlphaComponent:0.4];
shadow.shadowBlurRadius = 1;
shadow.shadowOffset = NSMakeSize(0, -1);
[shadow set];
// Draw white border
NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:badgeRect xRadius:badgeSize.height / 2.0 yRadius:badgeSize.height / 2.0];
[[NSColor whiteColor] setFill];
[path fill];
[NSGraphicsContext restoreGraphicsState];
// Fill the background with red gradient
badgeRect = NSInflateRect(badgeRect, -1.5, -1.5);
path = [NSBezierPath bezierPathWithRoundedRect:badgeRect xRadius:badgeSize.height / 2.0 yRadius:badgeSize.height / 2.0];
[[NSColor colorWithCalibratedRed:192.0 / 255.0 green:0.0 blue:0.0 alpha:1.0] setFill];
[path fill];
NSGradient* gradient = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedRed:241.0 / 255.0 green:113.0 / 255.0 blue:115.0 / 255.0 alpha:1.0]
endingColor:[NSColor colorWithCalibratedRed:192.0 / 255.0 green:0.0 blue:0.0 alpha:1.0]];
[gradient drawInBezierPath:path angle:-90.0];
// Draw the text
NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setAlignment:NSCenterTextAlignment];
NSDictionary* textAttributes = @{NSForegroundColorAttributeName:[NSColor whiteColor], NSParagraphStyleAttributeName:paragraphStyle};
[text drawInRect:badgeRect withAttributes:textAttributes];
}
- (NSSize)badgeSizeForString:(NSString*)string
{
NSDictionary* attributes = [NSDictionary dictionaryWithObject:[NSFont systemFontOfSize:13] forKey: NSFontAttributeName];
NSSize size = [string sizeWithAttributes:attributes];
// Paddings
size.height += 2.0;
size.width += 12.0;
return size;
}
答案 1 :(得分:0)
我移植了Dmitry对Swift 3的回答;在这里它是为了节省其他人一些时间。
8:04:20 PM - info: /api/v2 200
8:04:22 PM - info: /api/v2/asdf 200