我想创建一个显示进度条的NSStatusItem。我的想法是继承NSProgressIndicator并将其用作NSView传递给setView:

// SpinnerView.h
//#import <Cocoa/Cocoa.h>

@interface SpinnerView : NSProgressIndicator {
    NSStatusItem *_statusItem;
    BOOL _isHighlighted;
}
- (id)initWithStatusItem:(NSStatusItem *)statusItem;
@end

// SpinnerView.m
#import "SpinnerView.h"

@implementation SpinnerView

- (id)initWithStatusItem:(NSStatusItem *)statusItem {
    CGFloat thickness = [[NSStatusBar systemStatusBar] thickness];
    NSRect frameRect = NSMakeRect(0.0, 0.0, thickness, thickness);
    self = [super initWithFrame:frameRect];
    [self setStyle:NSProgressIndicatorSpinningStyle];
    [self setControlSize:NSSmallControlSize];
    _statusItem = statusItem;
    return self;
}

- (void)drawRect:(NSRect)dirtyRect {
    NSLog(@"drawRect");
    [_statusItem drawStatusBarBackgroundInRect:dirtyRect withHighlight:_isHighlighted];
    [super drawRect:dirtyRect];
}

@end


但是,当我这样做时,显示的是微调框,但周围有一个白框:



知道为什么会发生这种情况,或者如何解决?如果我注释掉整个drawRect:方法,结果将是相同的。

最佳答案

您只需要连续设置状态项目的图像即可。
 使用计时器。

08-18 03:07