gpt4 book ai didi

objective-c - 如何在 NSView (Mac OS X) 上显示徽章

转载 作者:行者123 更新时间:2023-12-03 16:54:36 25 4
gpt4 key购买 nike

要在 Dock 中向应用程序添加徽章很简单,只需调用 [NSDockTile setBadgeLabel] 即可。但我想向通用 NSView 添加徽章。有什么办法可以做到这一点吗?或者如果做不到这一点,您如何绘制一个,使其看起来与系统 UI 的其余部分保持一致?

最佳答案

没有内置方法可以在 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;
}

关于objective-c - 如何在 NSView (Mac OS X) 上显示徽章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19816239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com