2010-10-23 10 views
8

Я создаю приложение, которое должно отображать индикатор выполнения в значке док-станции. В настоящее время у меня есть это, но оно не работает:Добавление значка NSProgressIndicator к значку док-станции

NSProgressIndicator *progressIndicator = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, 10.0f, 20.0f)]; 
    [progressIndicator setStyle:NSProgressIndicatorBarStyle]; 
    [progressIndicator setIndeterminate:NO]; 
    [[[[NSApplication sharedApplication] dockTile] contentView] addSubview:progressIndicator]; 
    [progressIndicator release]; 

Или я должен нарисовать его на доке? Может кто-нибудь мне помочь? Благодарю.

ответ

2

Просто был играть с DockTile образец кода: http://developer.apple.com/library/mac/#samplecode/DockTile/Introduction/Intro.html#//apple_ref/doc/uid/DTS10004391

мне удалось получить бар NSProgress, чтобы отобразить там, добавив

NSProgressIndicator *progressIndicator = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0.0f, 0.0f, 100.0f, 20.0f)]; 
[self addSubview:progressIndicator]; 
[progressIndicator setStyle:NSProgressIndicatorBarStyle]; 
[progressIndicator setIndeterminate:NO]; 
[progressIndicator setMinValue:0]; 
[progressIndicator setMaxValue:100]; 
[progressIndicator setDoubleValue:25]; 
[progressIndicator release]; 

к SpeedometerView.m в initWithFrame, но это было до сих пор сели на док.

Я также нашел эту страницу: http://osx.hyperjeff.net/Apps/apps?p=4&sub=22&l=1&u=on, у которой есть «PMProgressIndicator», который может помочь, но я не погружался в него.

Надеюсь, что поможет немного, напишите здесь, если вы это выясните, мне было бы интересно узнать, как хорошо.

+0

Я понял, что мне нужно для повторного просмотреть docktile каждый раз, когда прогресс бар изменился. (: – 2010-10-30 23:41:34

+0

Был ли бар для вас серым? Когда я быстро пошел, он всегда был серым для меня ... – Oliver

5

В отделке я должен был использовать следующий код в качестве contentView был нулевым:

docTile = [[NSApplication sharedApplication] dockTile]; 
    NSImageView *iv = [[NSImageView alloc] init]; 
    [iv setImage:[[NSApplication sharedApplication] applicationIconImage]]; 
    [docTile setContentView:iv]; 

    progressIndicator = [[NSProgressIndicator alloc] 
               initWithFrame:NSMakeRect(0.0f, 0.0f, docTile.size.width, 10.)]; 
    [progressIndicator setStyle:NSProgressIndicatorBarStyle]; 
    [progressIndicator setIndeterminate:NO]; 
    [iv addSubview:progressIndicator]; 

    [progressIndicator setBezeled:YES]; 
    [progressIndicator setMinValue:0]; 
    [progressIndicator setMaxValue:1]; 
    [progressIndicator release]; 

    [self setProgress:[NSNumber numberWithFloat:-1]]; 
} 

- (void)setProgress:(NSNumber *)fraction { 
    if ([fraction doubleValue] >= 0) { 
     [progressIndicator setDoubleValue:[fraction doubleValue]]; 
     [progressIndicator setHidden:NO]; 
    } 
    else 
     [progressIndicator setHidden:YES]; 
    [docTile display]; 
}