Adding an NSProgressIndicator to the dock icon

前端 未结 2 1173
無奈伤痛
無奈伤痛 2021-02-14 17:55

I\'m creating an application which should show a progress bar in the dock icon. Currently I have this, but it\'s not working:

  NSProgressIndicator *progressIndi         


        
相关标签:
2条回答
  • 2021-02-14 18:27

    Just had a play around with the DockTile sample code: http://developer.apple.com/library/mac/#samplecode/DockTile/Introduction/Intro.html#//apple_ref/doc/uid/DTS10004391

    I managed to get an NSProgress bar to display there by adding

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

    to SpeedometerView.m in initWithFrame, but it was still greyed out in the dock.

    I also found this page: http://osx.hyperjeff.net/Apps/apps?p=4&sub=22&l=1&u=on which has "PMProgressIndicator" which might help, but I didn't dive through it.

    Hope that helps a bit, post back on here if you figure it out, I'd be interested to know as well.

    0 讨论(0)
  • 2021-02-14 18:49

    In the finish I had to use the following code as the contentView was null:

        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];
    }
    
    0 讨论(0)
提交回复
热议问题