gpt4 book ai didi

cocoa - NSStatusItem 中的 NSProgressIndicator

转载 作者:行者123 更新时间:2023-12-03 17:29:35 26 4
gpt4 key购买 nike

我有 NSStatusItem 和显示图像的自定义 NSView。无论菜单是否打开,它都会显示不同的图像,如下所示:

 isMenuVisible = NO;

- (void)awakeFromNib {

statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[statusItem retain];

dragStatusView = [[DragStatusView alloc] init];
[dragStatusView retain];
dragStatusView.statusItem = statusItem;
[dragStatusView setMenu:statusMenu];
[dragStatusView setToolTip:NSLocalizedString(@"Menubar Countdown",
@"Status Item Tooltip")];
[statusItem setView:dragStatusView];
[dragStatusView setTitle:@"11"];
}

- (void)drawImage:(NSImage *)aImage centeredInRect:(NSRect)aRect{
NSRect imageRect = NSMakeRect((CGFloat)round(aRect.size.width*0.5f-aImage.size.width*0.5f),
(CGFloat)round(aRect.size.height*0.5f-aImage.size.height*0.5f),
aImage.size.width,
aImage.size.height);
[aImage drawInRect:imageRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f];
}

- (void)drawRect:(NSRect)rect {
// Draw status bar background, highlighted if menu is showing
[statusItem drawStatusBarBackgroundInRect:[self bounds]
withHighlight:isMenuVisible];




if(isMenuVisible) {
[self drawImage:image2 centeredInRect:rect];
}else {
[self drawImage:image1 centeredInRect:rect];

}}

(当然这不是全部,但我希望所有相关代码能够理解我的问题)

现在我想在这个 NSView (在此 NSStatusItem 中)显示一个 NSProgressIndicator 如果上传正在进行,这意味着1、上传开始时设置NSProgressIndicator2.收到东西了吗? ==> 隐藏 NSProgressIndicator 再次显示图像。

我该如何解决这个问题?

请帮助我。谢谢

最佳答案

这是基于 View 的状态项的解决方案。

NSStatusBar *bar = [NSStatusBar systemStatusBar];
self.theItem = [bar statusItemWithLength:NSVariableStatusItemLength];
self.statusView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 40, 20)];
NSProgressIndicator* progress = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0, 0, 40, 20)];
[progress setIndeterminate:NO];
[self.statusView addSubview:progress];
self.theItem.view = self.statusView;

您还可以在基于菜单的状态项中自己绘制进度条
在进度更改时,您只需更改状态项的图像即可。

- (void) updateIconWithProgress:(float)aProgress
{
NSImage* image = [NSImage imageNamed:@"small_icon_16_16.png"];
NSImage* img = [image copy];
[img lockFocus];

NSRect rect = NSMakeRect(2, 4, 12.0*aProgress, 8.0);
[[NSColor blueColor] set];
[NSBezierPath fillRect:rect];

[img unlockFocus];
[self.theItem setImage:img];
}

附:该代码是为 ARC(自动引用计数)编写的,因此没有保留或释放。

关于cocoa - NSStatusItem 中的 NSProgressIndicator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385499/

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