Cocoa状态栏中的进度微调器

时间:2014-01-23 21:01:55

标签: objective-c macos cocoa

我想创建一个显示进度微调器的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

然而,当我这样做时,显示微调器但被白框包围:

Spinner in status bar

知道为什么会这样,或者如何修复它?如果我注释掉整个drawRect:方法,结果都是一样的。

1 个答案:

答案 0 :(得分:0)

您需要不断为状态项设置图像。  使用计时器。

相关问题