2010-10-23 29 views
8

Je crée une application qui devrait afficher une barre de progression dans l'icône du Dock. Actuellement j'ai ceci, mais cela ne fonctionne pas:Ajout d'un NSProgressIndicator à l'icône du Dock

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]; 

Ou dois-je le dessiner sur le dock moi-même? Quelqu'un peut-il m'aider? Merci.

Répondre

2

juste eu un jeu avec le code exemple DockTile: http://developer.apple.com/library/mac/#samplecode/DockTile/Introduction/Intro.html#//apple_ref/doc/uid/DTS10004391

J'ai réussi à obtenir une barre NSProgress pour afficher il en ajoutant

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 dans initWithFrame, mais il était encore grisé dans le dock.

J'ai également trouvé cette page: http://osx.hyperjeff.net/Apps/apps?p=4&sub=22&l=1&u=on qui a "PMProgressIndicator" qui pourrait aider, mais je n'ai pas plongé à travers elle.

J'espère que cela vous aidera un peu, revenez ici si vous comprenez, je serais également intéressé de le savoir.

+0

Je compris que je dois réafficher la vue du docktile chaque fois que la barre de progression a changé. (: –

+0

Le bar était-il grisé pour vous? Quand je me suis empressé de le faire, il était toujours grisé pour moi ... – Oliver

5

Dans la ligne d'arrivée, je devais utiliser le code suivant comme contentView était nulle:

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]; 
}